方括号 [ ]
分支结构是 Shell 脚本中常见的结构。
分支判断的表达式一般是放在 [
与 ]
之间。例如:
#!/usr/bin/env bash
x=${1:-3}
if [ ! $x -gt 3 ]; then
echo "${x} not gt 3"
elif [ $x -gt 3 ]; then
echo "${x} gt 3"
fi
# 判断第一个参数(默认3)是否大于3
在 [
]
之间,字符串比较采用:==
!=
\<
\>
,例如:
# [ ab == abc ]; echo $?
1
# [ ab \< abc ]; echo $?
0
# [ ab != abc ]; echo $?
0
在 [
]
之间,整数型的比较能采用的还有:-eq
-ne
-gt
等等的形式,如:
# [ 1 -eq 1 ]; echo $?
0
test 指令:
# test 1 -eq 1; echo $?
0
逻辑判断的与 -a 或 -o 非 !:
# [ 1 -le 0 -a 2 -ge 1 ]; echo $?
1
# [ 1 -le 2 -o 2 -ge 1 ]; echo $?
0
# [ ! 1 -le 0 -a 2 -ge 1 ]; echo $?
0
双中括号 [[ ]]:
在双中括号里面,与或表达式也可以这样表达:
# [[ 1 -le 0 && 2 -ge 1 ]]; echo $?
1
# [ 1 -le 0 ] && [ 2 -ge 1 ]; echo $?
1
# [[ 1 -le 2 || 2 -ge 1 ]]; echo $?
0
# [ 1 -le 2 ] || [ 2 -ge 1 ]; echo $?
0
双括号 (( )):
# ((1 ==1)); echo $?
0
# ((1 ==1 && 0 == 1)); echo $?
1
# ((1 ==1)) || ((0 == 1)); echo $?
0
switch
分支:
#!/usr/bin/env bash
x=${1:-""}
case ${x} in
start)
echo "start ok"
;; # 注意用双分号结束分支
stop)
echo "stopok"
;;
restart)
echo "restart ok"
;;
*)
echo "no param"
;;
esac # 注意闭合标签
end.