
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的命令。

图2-4 多分支if语句工作流程
通过一个案例来熟悉多分支if语句的格式,下面的脚本执行后提示用户输入论坛积分,根据输入的论坛积分输出论坛等级。

接下来,看一个猜随机数的游戏。在Linux系统中有一个内置环境变量,变量名称为RANDOM,该变量的值是0~32767之间的随机整数。通过求模运算,可用将数字变为我们需要的范围。比如,对10求模,可以获取0~9之间的整数;对100求模的结果永远是0~99之间的整数;对33求模后再加1,结果永远是1~33之间的整数。

在CentOS7系统中提供了一个可以非交互创建磁盘分区的命令,并且该分区工具支持多种分区表格式,包括MS-DOS(MBR)和GPT格式。传统的MS-DOS分区表格式,仅支持最大4个主分区,单个分区最大容量为2GB。而GPT格式的分区表很好地解决了这些问题。
警告
改变分区表格式后,原有磁盘中的数据将会全部丢失,因此重要数据一定要提前备份。
parted命令的语法格式如下,常用磁盘操作指令如表2-6所示。
表2-6 常用磁盘操作指令

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指令查看修改效果。

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手册。接下来看如何通过脚本实现分区管理。
