![Linux Shell核心编程指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/237/27741237/b_27741237.jpg)
2.10 实战案例:多分支if语句
if的双分支语法结构仅可以对事务的正确与错误两种情况做出回应,而现实问题往往更复杂,比如数字的大于、小于、等于判断。多分支if语句支持else if(简写elif)子句,可以实现在else中内嵌if的功能。在多分支if语句中elif可以出现多次,实现多次测试判断的效果。首先,来看看多分支if语句的语法格式。
if条件测试1; then 命令序列1 elif条件测试2; then 命令序列2 elif条件测试3; then 命令序列3 … … else 命令序列n Fi
多分支if语句工作流程如图2-4所示。如果if判断1成立(结果为真),则执行命令序列1中的命令,否则继续进行elif判断;如果elif判断2成立,则执行命令序列2中的命令,否则继续进行elif判断3,依此类推。如果所有的条件判断都不成立,则执行最后else语句中的命令序列n的命令。
![](https://epubservercos.yuewen.com/B53532/15937388204513606/epubprivate/OEBPS/Images/figure_0104_0001.jpg?sign=1738893886-GPIfDqD0Ey0fzPXv4ZAYiRmguZzTXr5f-0-e9494884d6a9aad1862747cbb1c7d4fe)
图2-4 多分支if语句工作流程
通过一个案例来熟悉多分支if语句的格式,下面的脚本执行后提示用户输入论坛积分,根据输入的论坛积分输出论坛等级。
![](https://epubservercos.yuewen.com/B53532/15937388204513606/epubprivate/OEBPS/Images/figure_0105_0001.jpg?sign=1738893886-nH6NdRQL0HLncdty3jkd6Vbc7ittRGEy-0-78237f037bb61d2fb9c380c1c9a34679)
接下来,看一个猜随机数的游戏。在Linux系统中有一个内置环境变量,变量名称为RANDOM,该变量的值是0~32767之间的随机整数。通过求模运算,可用将数字变为我们需要的范围。比如,对10求模,可以获取0~9之间的整数;对100求模的结果永远是0~99之间的整数;对33求模后再加1,结果永远是1~33之间的整数。
![](https://epubservercos.yuewen.com/B53532/15937388204513606/epubprivate/OEBPS/Images/figure_0106_0002.jpg?sign=1738893886-oj2rlJKNtZDIs1BV62FEPHQ6JiKDkdIy-0-b6a6128f475a9d902bb50fdcdcd98cae)
在CentOS7系统中提供了一个可以非交互创建磁盘分区的命令,并且该分区工具支持多种分区表格式,包括MS-DOS(MBR)和GPT格式。传统的MS-DOS分区表格式,仅支持最大4个主分区,单个分区最大容量为2GB。而GPT格式的分区表很好地解决了这些问题。
警告
改变分区表格式后,原有磁盘中的数据将会全部丢失,因此重要数据一定要提前备份。
parted命令的语法格式如下,常用磁盘操作指令如表2-6所示。
表2-6 常用磁盘操作指令
![](https://epubservercos.yuewen.com/B53532/15937388204513606/epubprivate/OEBPS/Images/figure_0107_0001.jpg?sign=1738893886-p5CsP4wmu8Z4T2hpTR2qbtdugRC2XqDV-0-1e14440aacc9c5ec79d9cb1e08cd0886)
parted [选项] [磁盘 [操作指令]]
通过一块sdc磁盘来进行GPT分区演示,具体操作方法如下。
1)修改分区表类型
[root@centos7~]# parted /dev/sdc mklabel gpt #新建GPT分区表格式 Information: You may need to update /etc/fstab.
第一次给磁盘创建分区表时,系统仅提示一个信息,此步骤即可完成。如果磁盘原本有分区表,则该命令会提示警告信息,提示数据会丢失,需要用户输入yes确认操作。在编写脚本时,如果不希望出现类似的交互提示,则需要使用-s选项。
[root@centos7~]# parted /dev/sdc mklabel gpt #修改分区表格式 Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? yes #输入yes完成修改
修改完成后,可以通过print指令查看修改效果。
![](https://epubservercos.yuewen.com/B53532/15937388204513606/epubprivate/OEBPS/Images/figure_0107_0002.jpg?sign=1738893886-4N89p2D64qg7ihFKsQ2VWnxbOPHVdeJY-0-5c1d29eef5909e56247bcef29be4636e)
2)创建与删除分区
创建新的分区需要使用parted命令的mkpart指令,语法格式如下。
parted磁盘mkpart分区类型 [文件系统类型] 开始 结束
其中,分区类型有primary、logical、extended三种,文件系统类型为可选项,支持的类型有fat16、fat32、ext2、ext3、linux-swap等,开始与结束标识区分开始与结束的位置(默认单位为MB),也可以使用百分比表示分区位置,比如从磁盘容量的50%开始分区,直到磁盘容量的100%结束。
[root@centos7~]# parted /dev/sdc mkpart primary xfs 1 1G
上面的命令将创建一个格式为xfs的主分区,从磁盘的第1MB位置开始分区,到1GB的位置结束(大小为1GB的主分区)。
[root@centos7~]# parted /dev/sdc mkpart primary xfs 1G 2G #创建1GB大 小的分区 [root@centos7~]# parted /dev/sdc mkpart primary 2G 50% [root@centos7~]# parted /dev/sdc mkpart primary 50% 100% [root@centos7~]# parted /dev/sdc print #查看分区表信息 Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdc: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: @@ Number Start End Size File system Name 标识 1 1049kB 1000MB 999MB primary 2 1000MB 2000MB 999MB primary 3 2000MB 10.7GB 8738MB primary 4 10.7GB 21.5GB 10.7GB primary [root@centos7~]# parted /dev/sdc rm 4 #删除任意分区
除了基本的创建与删除分区,利用parted命令还可以进行分区检查、调整分区大小、恢复误删除分区等操作,关于parted命令的更多使用方法,可以查阅man手册。接下来看如何通过脚本实现分区管理。
![](https://epubservercos.yuewen.com/B53532/15937388204513606/epubprivate/OEBPS/Images/figure_0108_0001.jpg?sign=1738893886-89XRyfSi508HslvYK4lJJQnRezJ9oIpy-0-c374938ddb088b91bdd43b255930b209)