1.语法格式
1.1 最基本的格式
if [ condition ];then
符合if时执行的语句
fi
1.2 扩展格式
if [ condition ];then
符合该if时执行的语句
elif [ condition ];then
符合该if时执行的语句
else
都不符合时执行的语句
fi
其中
elif=else if
elif可以有多个,也可以没有
2.条件判断
2.1 文件目录判断
[ -d file ] 判断file是否目录
[ -e file ] 判断file是否存在
[ -f file ] 判断file是否普通文件
[ -r file ] 判断file是否可读
[ -s file ] 判断file是否非空
[ -w file ] 判断file是否可写
[ -x file ] 判断file是否可执行
[ -S file ] 判断file是否socket文件
[ -p file ] 判断file是否管道文件
[ -c file ] 判断file是否字符文件
[ -b file ] 判断file是否块文件
[ -L file ] 判断file是否软连接
2.2字符串判断
[ str1 == str2 ] 判断str1和str2是否相等
[ str1 != str2 ] 判断str1和str2是否不等
[ str1 \> str2 ] 判断str1是否比str2大,\为转义符
[ str1 \< str2 ] 判断str1是否比str2小,\为转义符
[ -z str ] 判断str的长度是否为0
[ -n str ] 判断str的长度是否为非0
2.3 数值判断
[ n1 -eq n2 ] 判断n1和n2是否相等
[ n1 -ne n2 ] 判断n1和n2是否不等
[ n1 -gt n2 ] 判断n1是否比n2大
[ n1 -ge n2 ] 判断n1是否大于等于n2
[ n1 -lt n2 ] 判断n1是否比n2小
[ n1 -le n2 ] 判断n1小于等于n2
2.4 逻辑判断
[ ! condition ] 逻辑非,如果condition 是false则返回为真
[ condition1 -a condition2 ] 逻辑与,condition1和condition2必须同时为真才为真
[ condition1 -o condition2 ] 逻辑或,condition1和condition2其中有一个为真则为真
[ condition1 ] && [ condition2 ] 布尔或,if判断时同-a,若是两个命令,则前面执行成功,才执行后面
[ condition1 ] || [ condition2 ] 布尔与,if判断时同-o,若是连个命令,则前面执行失败,才执行后面
3.if的高级特性:(())和[[ ]]
3.1(())
表示数学表达式,只用于数值
(( n1 == n2 )) 判断n1和n2是否相等
(( n1 != n2 )) 判断n1和n2是否不等
(( n1 > n2 )) 判断n1是否比n2大
(( n1 >= n2 )) 判断n1是否大于等于n2
(( n1 < n2 )) 判断n1是否比n2小
(( n1 <= n2 )) 判断n1是否小于等于n2
(( expr1 )) && (( expr2 )) 与,不支持-a,同(( expr1 && expr2 ))
(( expr1 )) || (( expr2 )) 或,不支持-o,同(( expr1 || expr2 ))
(())还支持以下符号
n++ 后增
n-- 后减
++n 先增
--n 先减
! 取反
~ 位求反
** 幂运算
<< 左位移
>> 右位移
& 位与
| 位或
&& 逻辑与
|| 逻辑或
3.2 [[ ]]
表示高级字符串处理功能,数值和字符串都可以使用,处理数值时同(())
[[ str1 < str2 ]] 判断str1是否比str2大,同[ str1 \< str2 ]
[[ str1 > str2 ]] 判断str1是否比str2小,同[ str1 \> str2 ]
[[ expr1 ]] && [[ expr2 ]] 与,不支持-a,同[[ expr1 && expr2 ]]
[[ expr1 ]] || [[ expr2 ]] 或,不支持-o,同[[ expr1 || expr2 ]]
[[ str == a* ]] 判断字符串是否以a开头
4. case多分支格式
case ${var} in
"value1" )
满足value1时执行的语句
;;
"value2" )
满足value2时执行的语句
;;
......省略其他分支......
*)
以上都不满足时执行的语句
;;
esac