shell脚本之条件测试

1:测试文件状态

参数:
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否可执行(Excute)该文件
-L:测试是否为符号连接(Link)文件

代码:

if [ -e array.sh ];then
    if [ -d array.sh ];then
        echo "array.sh is a directory"
    else
        if [ -f array.sh ];then
            echo "array.sh is a file"
        fi
    fi
fi

2:整数值比较

参数:
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)

代码:

num1=3
num2=5
if [ $num1 -eq $num2 ];then
echo "num1 equal num2"
else
    if [ $num1 -gt $num2 ];then
        echo "num1 大于 num2"
    else
        echo "num1 小于 num2"
    fi
fi

3:字符比较

运算符: >、<

代码:
if [[ 'e' > 'c' ]];then
#if [ 'e' \> 'c' ];then
    echo "字母e的ASCII值大于字母c的ASCII的值"
else
    echo "字母e的ASCII值小于字母c的ASCII的值"
fi

4:字符串比较

运算符:
=: 字符串内容相同
!=: 字符串内容不同,! 号表示相反的意思
-z: 字符串内容为空
-n: 字符串内容不为空
=~:匹配正则表达式

代码:

str1=word
str2=character
if [ -z $str1 ] || [ -z $str2 ];then
    echo "字符串str1或str2中有一个为空字符串"
    else
    if [ $str1 = $str2 ];then
        echo "字符串str1,str2内容相同"
        else
        echo "字符串str1,str2内容不同"
    fi
fi

[[ "test" =~ [a-z]{4} ]]

5:逻辑测试

运算符:
-a或&&: 逻辑与,“而且”的意思 前后两个表达式都成立时整个测试结果才为真,否则为假
-o或||: 逻辑或,“或者”的意思 操作符两边至少一个为真时,结果为真,否则结果 为假
!: 逻辑否 当指定的条件不成立时,返回结果为真

代码:
if [ $num1 -gt 1 -a $num1 -lt 5 ];then
    echo "num1在区间[1,5]之间"
fi

注意:
1) 使用符号"=~"匹配正则表达式时,只能用"[[ ]]"
2 )使用"[ ]"时最好在变量的外侧加上双引号,这样测试结果的返回值才准确,使用"[[ ]]"时则不需要加上双引号
3 )使用"[ ]"时,如果使用"&&"或"||"对多个条件进行连接,"&&"或"||"必须放在"[ ]"之外;如果使用"-a"或"-o"对多个条件进行连接,"-a"或"-o"必须放在"[ ]"之内
4) 使用"[[ ]]"时,不支持使用"-a"或"-o"对多个条件进行连接;如果使用"&&"或"||"对多个条件进行连接,"&&"或"||"不限内外

猜你喜欢

转载自blog.csdn.net/qq_33575901/article/details/85213020