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

相关推荐