13、结构化语句
13.1 if then语句
格式1:
if 命令
then
fi
if行中如果命令返回的退出状态为0,则执行then中的所有命令,否则就会跳过这些命令。
格式2:
if 命令 ; then
fi
13.2、if then else语句
if 命令
then
else
fi
13.3、嵌套if语句
if 命令
then
elif
then
fi
13.4、test命令
作用:如果test命令中列出的条件值为true,则test命令以0退出状态代码退出,相当于模拟了boolean表达式的作用。
格式1:test 条件
格式2:[ 条件 ]
数值比较:
-eq
-ge
-le
-gt
-lt
-ne
字符串比较:
=
!=
<
>
-n 长度是否大于0
-z 长度是否为0
文件比较:
-d 是否存在并且是一个目录
-e 是否存在
-f 是否存在并且是一个文件
-r 是否存在并可读
-s 是否存在并且不为空
-w 是否存在并可写
-x 是否存在并可执行
-O 是否存在并被当前用户拥有
-G 是否unzai并默认组为当前用户组
-nt 是否更新
-ot 是否更旧
复合条件检查:
&&
||
13.5、if then 高级特征
双圆括号:(( 表达式 )),表达式可以是任何的数学赋值表达式或数学比较表达式。
双圆括号命令符号:
++
--
!
~
**取幂
<<
>>
&
|
&&
||
双方括号:[[ 表达式 ]],提供了模式匹配,例如 [[ $USER == r* ]] $USER是否以r开头
13.6、case命令
格式:
case 变量 in
值1 | 值2)
;;
值3)
;;
*)相当于default
;;
例子:
case $result in
1)
tip="result is 1";;
2)
tip="result is 2";;
3)
tip="result is 3";;
*)
tip="other result";;
esac