if-then-else 命令详解
命令结构
if command;then
commands
else
commands
fi
或者
if commands;then
commands
elif
commands
else
commands
fi
if 条件
从上述结构中可以看出 if的条件为command,当command成功执行会返回状态码0,则会执行if下面的commands,then并不会执行;否则则会执行0;因此可以轻松判断自己的脚本是否成功执行。但是 如何执行普通的条件呢?shell 则提供了 test命令
if test condition
then
commands
else
commands
fi
或者
if [condition]
then
commands
else
commands
if
看起来写脚本也挺简单的嘛!NO!! 条件中可不是简单大于小于号,仅这些比较符号记住都得恶心死;往下看
数值比较
比较运算符 | 描述 |
---|---|
-eq | 等于 |
-ge | 大于等于 |
-gt | 大于 |
-le | 小于等于 |
-lt | 小于 |
-ne | 不等于 |
看了上面的东西是不是感觉挺恶心的?那有没有简单点的表达式呢?
福音来了!双圆括号:((expression))
可以支持正常数字的运算和比较!
if ((expression))
then
commands;
else
commands;
fi
字符串比较
字符串的比较相对来说可读性较强,但有一点让人比较难接受 (>,<要转义)
比较运算符 | 描述 |
---|---|
[ str1= str2] | 相等 |
[ str1!= str2] | 不等 |
[ str1∗∗&amp;amp;amp;amp;amp;amp;lt;∗∗ str2] | 小于 |
[ st1∗∗>∗∗ str2] | 大于 |
[-n $str1] | 不为空 |
[-z $str1] | 空 |
[[$str1=”r*”]] | 正则匹配 |
文件比较
在写脚本的时候也很重要,这么多参数,我可记不住
判断 | 描述 |
---|---|
-d file | 是否存大路径 |
-e file | 是否存在 |
-f file | 是否存在并是文件 |
-r file | 是否可读 |
-s file | 可读并不为空 |
-w file | 可写 |
-x file | 可执行 |
-O file | 为当前用户拥有 |
-G file | 是否和用户同组 |
file1 -nt file2 | file1 比file2 新 |
file1 -ot file2 | file1 比file2 旧 |
复合条件
if []&&,|| []
then
commands
else
commands
fi
case 表达式
如果if 写烦了,可以考虑case表达式
case 在字符串比较时支持正则
case $str in
$str1 | $str2)
commands
$str3)
commands
*)
commands
esac