简介
- 对shell脚本中的命令施加一些逻辑流程控制。有一类命令会根据条件使脚本跳过某些命令,根据条件去执行指定的命令。这样的命令通常称为结构化命令(structured command)
- 结构化命令允许你改变程序执行的顺序。
if语法格式
单分支 | 双分支 | 多分支 |
---|---|---|
if command;then
commands fi |
if command;then
commands else commands fi |
if command;then
commands elif commands elif commands … .else commands fi |
bash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码是0,位于then部分的明星就会被执行。如果该命令的退出状态码是其他值,then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。fi语句用来表示if-then语句到此结束。
if语句可以多层嵌套使用,每块命令都会根据命令是否会返回退出状态码买执行。记住,只有第一个返回退出状态码0的语句中的then部分会被执行。
test命令
文件比较
复合条件测试
if-then语句允许使用布尔逻辑来组合测试。有以下两种运算符可用
[ condition1 ] && [ condition2 ]
使用and布尔预算,两个条件都满足,返回状态码才为0,这样才会执行then部分的指令。
[ condition1 ] || [ condition2 ]
使用or布尔运算,任意一个条件为真,then部分的指令就会执行。
if-then的高级特性
双括号(( expression ))
双括号命令允许你在比较过程中使用高级数学表达式。test命令只能在比较中使用简单的算数操作。
符号 | 描述 |
---|---|
val++ | 后增 |
val– | 后减 |
++val | 先增 |
–val | 先减 |
! | 逻辑取反 |
- | 位求反 |
** | 幂运算 |
<< | 左位移 |
>> | 右位移 |
& | 位布尔和 |
| | 位布尔或 |
&& | 逻辑和 |
|| | 逻辑或 |
双方括号[[ expression ]]
双方括号里的expression使用了test命令中采用的标准字符串比较。它提供了test命令未提供的另一个特性——模式匹配(pattern matching)
[[ "$HOSTNAME" == localhost.* ]]
#.*使用模式匹配
[[ "$HOSTNAME" == "localhost.*" ]]
#.*使用引号引起来代表普通字符