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"对多个条件进行连接;如果使用"&&"或"||"对多个条件进行连接,"&&"或"||"不限内外