Shell流程控制
判断
所谓判断,就是对语句中不同的条件进行测试,进而根据不同的条件执行不同的语句。if、then、else语句用于判断给定的条件是否满足,可用于判断整数比较大小、字符串操作、文件操作以及逻辑运算等方面,并根据测试条件的真假来选择相应的操作。
if/else结构仅仅用于两分支判断,但在实际问题中常常需要多分支的选择,所以,需用到if/else语句嵌套、if/elif/else和case多分支选择判断结构。
简单if结构
简单的if语句是条件语句的一种形式,它针对某种条件做出相应的处理。最简单的if结构是:
if expression
then
command
command
...
fi
在使用这种简单的if结构时,要特别注意测试条件后如果没有“;”,则then语句要换行,否则会产生不必要的错误。如果if和then可以处于同一行,则必须用“;”来终止if语句,其格式为:
if expression; then
exit命令
由于判断语句和循环语句都涉及exit命令来控制程序和表达式的流程,所以,在本节中将介绍exit命令作为补充。现在有的编程语言中一般都会有一个exit的函数,在Linux Shell中也存在这样的内建命令。命令格式为:
exit status
其中,status用0~255之间的数字表示,一般返回该状态值的同时伴随着脚本的退出,同退出状态一样,参数被保存在Shell变量$?中,可通过echo命令进行查询。要注意的是,不要在终端运行exit命令,否则将会导致系统重启。
if/else结构
if/else命令是双向选择语句,当用户执行脚本时,如果不满足if后的表达式,也会执行else后的命令,所以,有很好的交互性。该结果首先判断if后面的表达式,如果表达式的退出状态为0,则执行then和else中间的语句,如果表达式的退出状态为非0,则执行else和fi中的语句,then和else、else和fi中间的语句可以是单个命令,也可是多个命令。其结构为:
for循环
for循环是Linux Shell中最常用的结构。 for循环有三种结构:
- 一种结构是列表for循环;
- 第二种结构是不带列表for循环;
- 第三种结构是类C风格的for循环。
列表for循环
列表for循环语句用于将一组命令执行已知的次数,下面给出了for循环语句的基本格式:
for variable in {list}
do
command
command
done
其中,do和done之间的命令称为循环体,执行次数和list列表中常数或字符串的个数相同。当执行for循环时,首先将in后list列表的第一个常数或字符串赋值给循环变量,然后执行循环体;接着将list列表中的第二个常数或字符串赋值给循环变量,再次执行循环体。这个过程将一直持续到list列表中无其他的常数或字符串,然后执行done命令后的命令序列。