一、条件判断参数详解
对于test和[](中括号)判断语句来说,判断结果为真,则退出值为0,即echo $?为0 ,即返回为true,其他为false
1、关于文件名(文件类型)的判断
-e 该[文件名]是否存在 文件和目录都会返回为真
-f 该[文件名]是否存在并且为文件(file)
-d 该[文件名]是否存在并且为目录(directory)
2、关于文件权限的检测
-r 检测该[文件名]是否存在且具有[可读]的权限
-w 检测该[文件名]是否存在且具有[可写]的权限
-x 检测该[文件名]是否存在且具有[可执行]的权限
-u 检测该[文件名]是否存在且具有[SUID]的属性
-g 检测该[文件名]是否存在且具有[SGID]的属性
3、两个文件之间的比较 test file1 -nt file2
-nt 判断file1是否比file2新
-ot 判断file1是否比file2旧
4、关于两个整数之间的判断 test n1 -eq n2
-eq 两数值相等
-ne 两数值不相等
-gt n1大于n2
-lt n1小于n2
-ge n1大于等于n2
-le n1小于等于n2
5、判断字符串的数据
test -z string 判断字符串是否为零,若是空字符串则返回true
yy=
yy=‘’
yy=“”
yy=’ ’
yy=’ ’
yy=" "
yy=" "
这些都是空字符串
test -n string 判断字符串是否为零,若是空字符串则返回false
test str1==str2 判断两个字符串是否相等,如果相等则返回true
test str1==str2 判断两个字符串是否不相等,如果相等则返回false
6、多重条件判断
-a and(同时成立) test -f filename -a -x filename
-o or(只需要一个成立即可) test -f filename -o -x filename
-! 非
二、注意点
1、test 判断语句,如果成功,退出码为0
例如
m=2
n=1
test $m -gt $n
#输出为0 0为真,为true 其他为false
echo $?
2、常见使用场景
test -e filename && echo "file exists" || echo "file not exists"
文件存在则输出file exists,文件不存在则输出file not exists
3、使用中括号进行判断
例如:
m=2
n=1
[ "$m" -gt "$n" ] ; echo $?
在使用中括号的时候需要注意前后需要有空格,并且对于参数的引用需要加上双引号,否则会报错,比如
[ "$m" -gt "$n" ] ; echo $?
#或者
[ "${m}" -gt "${n}" ] ; echo $?
name="lichf hhh"
[ $name == "lichf" ]
会报too many arguments ,因为解析之后会变成 [ lichf hhh == "lichf" ],所以需要用双引号括起来[ "$name" == "lichf" ]
4、if判断语句思考
if 0 ;then
echo "yes"
fi
if 1 ;then
echo "yes"
fi
上述语句是会报错的
if true ;then
echo "yes"
fi
if false ;then
echo "no"
fi
上述语句是成功的