1. 有一类命令会基于变量值或其他命令的结果等条件使脚本跳过或循环执行命令,这样的命令通常称为结构化命令。
2. 结构化命令中,最基本的类型就是if-then语句。if-then语句格式如下:
if command
then
commands
fi
bash shell的if语句会运行if行定义的那个命令。如果该命令的退出状态码是0.位于then部分的命令就会被执行。如果该命令的退出状态码是其他值,那then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。
if-then语句的另一个格式:
if command; then
commands
fi
在要执行的命令结尾加个分号,就可以在同一行使用then语句了。
3. if-then-else语句格式:
if command
then
commands
else
commands
fi
当if语句的命令返回退出状态码0时,then部分中的命令会被执行。当if语句中的命令返回非零退出状态码时,bash shell会执行else部分中命令。
4. elif语句格式:
if command1
then
commands
elif command2
then
more commands
fi
elif语句行提供了另一个要测试的命令,类似于原始的if语句。如果elif后命令的退出状态码是0,则bash会执行第二个then语句部分的命令。
5. test命令提供了在if-then语句中测试不同条件的途径。
test命令的格式:
test condition
condition是test命令要测试的一系列参数和值。当用在if-then语句中时,test命令格式是这样的:
if test condition
then
commands
fi
bash shell还提供了另一种在if-then语句中声明test命令的方法:
if [ condition ]
then
commands
fi
方括号定义了test命令中用到的条件。注意,你必须在左括号右侧和右括号左侧各加一个空格,否则会报错。
test命令可以判断3类条件:
(1) 数值比较;
(2) 字符串比较;
(3) 文件比较。
6. 使用test命令最常见的情形是对两个数值进行比较。
test命令的数值比较功能:
7. test命令无法处理变量中存储的浮点值。bash shell能处理的数仅有整数。
8. test命令的字符串比较功能:
9. 使用test命令的大于小于功能经常会有两个问题困扰我们:
(1) 大于小于符号必须转义,否则shell会把它们当做重定向符号而把字符串值当做文件名;
(2) 大于小于顺序和sort命令所采用的不同。
10.test命令的文件比较功能:
11.if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用:
(1) [ condition1 ] && [ condition2 ];
(2) [ condition1 ] || [ condition2 ]。
第一个布尔运算使用AND布尔运算符来组合两个条件。要让then部分的命令执行,两个条件都必须满足。
第二个布尔运算符使用OR布尔运算符来组合两个条件。如果任何一个条件最后都能得到一个真值,then部分的命令就会执行。
12.双尖括号命令的格式:<< expression >>
术语expression可以是任意的数学赋值或比较表达式。
双尖括号命令符号:
13.双方括号命令的格式:[[ expression ]]
双方括号里的expression使用了test命令中采用的标准字符串进行比较。但它提供了test命令未提供的另一个特性——模式匹配。
在模式匹配中,可以定义一个正则表达式来匹配字符串值。