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

 

posted @ 2020-06-25 18:31  junffzhou  阅读(731)  评论(0编辑  收藏  举报