1. if-then 语句
基本格式:
if command //若command命令执行完毕之后的状态码返回值为0,则执行then中的命令,否则 不执行then中的命令
then
commands
fi
if command;then //另一种格式
commands
fi
else 格式
if command;then //如果command中命令返回的退出状态码为0,则执行then
commands
else
commands //如果command中命令返回的退出状态码为非0,则执行else
fi
elif 格式
if command;then
commands
elif command;then
commands
elif command;then
commands
else
commands
fi
2. test命令
if test condition;then //如果condition条件不写,则以非零状态码退出,执行else中的 commands
commands
else
commands
fi
(1) my_variable="full"; test $my_variable //若变量my_variable为空,则退出码为非0,若有内容,则为0
方括号的表达形式
if [ condition ] //使用方括号来代替test,但是在方括号的两边必须具有空格
then
commands
fi
通常test可以测试三类条件
(1)数值比较
n1 -eq n2 //是否相等,相等,则退出码为0
n1 -ge n2 //是否大于或等于
n1 -gt n2 //是否大于
n1 -le n2 //是否小于等于
n1 -lt n2 //是否小于
n1 -ne n2 //不等于
其中n1 和 n2 可以使用变量,例如有变量var ,可以 $var -ne n2 这样使用,这种比较不能使用在浮点数中
(2)字符串比较
str1 = str2 //比较是否相等,通过ASCII表来比较,因此会比较标点,大小写等
str1 != str2 //比较是否不相等 等号两边留空格,也可以使用变量的方式
str1 \> str2 //比较大于,大于号需要转义,避免被shell当成重定向符
str1 \< str2 //比较小于,小于号需要转移,避免被shell当成重定向符
-n str1 //测试str1的长度是否为非0
-z str1 //测试长度是否为0
if [ -z $var ] //在这里,若var未被定义,这里也是可以执行的,只是var的长度为0, 故-z $var的退出码为0
(3)文件比较
-d file //检查file是否存在且是一个目录
-e file //检查file 是否存在
-f file //检查file是否是一个文件
-r file //检查file 是否存在并可读
-s file //检查file是否存在并非空
-w file //检查file 是否存在并可写
-x file //检查file是否存在并可执行
-O file //检查file是否存在并属于当前用户
-G file //检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比 fil2旧
3.复合条件测试
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
4.if-then 的高级特性
针对数学运算符的高级特性
(( expression )) ,支持除了上面以外的其他运算符
val++ 后增
val-- 后减
++val 先增
--val 先减
! 逻辑求反
~ 位求反
** 幂运算
<< 左位移
>> 右位移
& 位布尔求反
| 位布尔或
&& 逻辑和
|| 逻辑或
针对字符串比较的高级特性
[[ expression ]],两边有空格
5.case命令
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) commands;;