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 有特殊含义的字符,比如说 <,>,(,和 ),必须引起来或者是转义。

results matching ""

    No results matching ""