shell脚本之if判断以及case多分支选择
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