Linux Shell核心编程指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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