if条件分支
#基本样式
x=5
if [ $x = 5 ]; then
echo "x equals 5."
elif commands; then
command
else
echo "x does not equal 5."
fi
#如果if之后跟随一系列命令,则将计算列表中的最后一个命令
if false; true; then echo "It's true."; fi #true
if true; false; then echo "It's true."; fi #空值,其实为false
test
#if后面的判断表达式
test expression 与[expression]等价
#代码示例
[ -e "$FILE" ] #判断文件是否存在
[ -z "$ANSWER" ] #判断字符是否和0
[ $INT -eq 0 ] #判断字符是否等于0
(())
#(( ))被用来执行算术真测试
if ((1)); then echo "It is true."; fi #算术计算的结果是非零值,则一个算术真测试值为真
#简化脚本
INT=-5
[ $INT -eq 0 ]
((INT == 0)) #使用(())进行脚本简化
[[]]
#判断表达式的增强版本[[]],主要用“=~”正则判断,用于“==”判断匹配类型
[[ "$INT" =~ ^-?[0-9]+$ ]] #判断是否正则匹配
[[ $FILE == foo.* ]] #判断是foo.bar是foo.*的匹配类型
#复合表达式
操作符 test[]中使用 [[ ]] and (( ))中使用
AND -a &&
OR -o ||
NOT ! !
#复合表达式示例
[[ INT -ge MIN_VAL && INT -le MAX_VAL ]] #[[]]中使用&&
[ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ] #[]中使用-a
#注意:
#注意:
总结:知道了 test 和[[]]基本上完成相同的事情,test 使用的所有的表达式和操作符都被 shell 看作是命令参数(不像 [[ ]] 和 (( )) ),对于 bash 有特殊含义的字符,比如说 <,>,(,和 ),必须引起来或者是转义。