- if-then语句不能测试命令退出状态码之外的条件。
- test命令提供了在if-then语句中测试不同条件的途径。
- if test condition;then commands;fi
- 无需在if-then语句中声明test命令 if [ condition ];then commands;fi
- test命令可以判断三类条件:数值比较(bash shell只能处理整数) 字符串比较(将所有的标点和大小写情况都考虑在内) 文件比较(shell编程中最为强大、也是用得最多的比较形式)
- 标准数学运算比较功能(equal、greater than、less than):n1 -eq n2 检查n1是否与n2相等 -ge 大于或等于 -gt 大于 -le 小于或等于 -lt 小于 -ne 不等于
- 标准字符串比较:str1 = str2 检查str1是否和str2相同 != 不同 < 小 > 大 -n str1 是否非0 -z str1 是否为0
- 文件比较功能: -d file 是否存在并是目录 -e 存在 -f 存在并是文件 -r 存在并可读 -s 存在并非空 -w 存在并可写 -x 存在并可执行 -O 存在并属当前用户所有 -G 存在并默认属组与当前用户相同 file1 -nt file2 检查file1是否比file2新 file1 -ot file2 检查file1是否比file2旧
- if-then 格式:
- if command
- then
- commands
- fi
- if-then-else 格式:
- if command
- then
- commands
- else
- commands
- fi
- 嵌套 if-then 语句 的改进 elif 使用另一个 if-then 语句延续 else 部分 格式:
- if command1
- then
- commands
- elif command2
- then
- commands
- elif command3
- then
- commands
- ...
- fi
- case 语句格式:
- case variable in
- pattern1 | pattern2) commands1;;
- pattern 3) commands2;;
- *) commands;;
- esac
- 可以通过|(竖线)操作符在一行中分隔出多个模式,星号会捕获所有与已知模式不匹配的值。
- 方括号[ ] 是与 test命令 同义的特殊bash命令。
- 双括号(( )) 使用另一种操作符进行 高级数学运算。
- 双括号命令更多的运算符号: val++ 后增 val-- 后减 ++val 先增 --val 先减 ! 逻辑求反 ~ 位求反 ** 幂运算 << 左移位 >> 右移位 & 位布尔和 | 位布尔或 && 逻辑和 || 逻辑或
- 双方括号[[ ]]命令允许高级字符串模式匹配运算。例如: [[ $USER == r* ]]
- [ $val1 \> $val2 ] 方括号中>需要转义 VS (( $val1 ** 2 > 90 )) 双括号中>不需要转义。