结构化命令(structured command):程序要求对shell脚本中的命令施加一些逻辑流程控制或根据条件使脚本跳过某些命令。比如if-then语法:
if command
then
commands
fi
fi语句用来表示if-then语句到此结束。
在其他编程语言中,if语句后的对象是一个等式,该对象的值若为TRUE则执行接下来的命令,若为FALSE则不执行。
但bash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码是0(即命令成功运行),则位于then后的命令就会被执行。
如果该命令的退出状态码是其他值,then后的命令就不会被执行,bash shell会跳过这个if-then语句,去执行脚本中后面的命令。
我们还可以加一个分号(;),相当于告诉系统这一行是有两个命令。然后就可以将then语句放在同一行上了
if command; then
commands
fi

if-then语句中,不管命令是否成功执行,你都只有一种选择。当命令返回一个非零退出状态码,if-then-else语句就能够执行else的命令。语法:
if command
then
commands
else
commands
fi

可以使用else部分的另一种形式:elif。这样就不用再书写多个if-then语句了。elif使用另一个if-then语句延续else部分。语法:
if command1
then
commands
elif command2
then
commands
elif command3
then
commands
fi

if-then语句不能测试命令退出状态码之外的条件。而test命令提供了在if-then语句中测试不同条件的途径。
如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0。这样if-then语句就与其他编程语言中的if-then语句以类似的方式工作了。
如果条件不成立,test命令就会退出并返回非零的退出状态码,这使得if-then语句不会再被执行。
两种语法格式:
if test condition if [condition]
then then
commands commands
fi fi
也可以使用方括号([])定义测试条件。注意,如果有多个测试条件,每个条件之间用空格分隔。

test命令可以判断三类条件:
1.数值比较
2.字符串比较
3.文件比较
判断数值比较:
•只能进行整数运算比较
•注意中括号([])前后一定要与里面的内容用空格隔开,否则无法运行!!!

字符串比较:
•字符串相等性:所有的标点和大小写情况都考虑在内
•字符串顺序:大于号和小于号必须转义;大小写字母排序与sort命令恰好相反
•字符串大小:-n和-z可以检查一个变量是否含有数据。
文件比较
测试Linux文件系统上文件和目录的状态。
布尔逻辑(boolean logic)是一种能够将可能的返回值简化为TRUE或FALSE的方法。 if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用:
1.[ condition1 ] && [ condition2 ] 表示“与”,即既要满足condition1也要满足condition2时,才会返回TRUE值。否则返回FLASE值
2.[ condition1 ] || [ condition2 ] 表示“或”,即condition1和condition2只要满足其中一个时,就会返回TRUE值。都不满足则返回FLASE值。

双括号命令(( expression ))允许你在比较过程中使用高级数学表达式。test命令只能在比较中使用简单的算术操作。双括号命令提供了更多的数学符号,并且不需要将双括号中表达式里的大于号转义。
双方括号命令[[ expression ]]使用了test命令中采用的标准字符串比较,并且提供模式匹配
(pattern matching)


被折叠的 条评论
为什么被折叠?



