表达式测试包括字符串测试、整数测试、文件测试及逻辑测试。
内置测试命令 test
通常用 test 命令来测试表达式的值,如下:
x=5; y=10
test $x -gt $y
echo $?
test 命令可以用方括号“[ ]”来代替:
x=5; y=10
[ $x -gt $y ]
echo $?
2.x 版本以上的 Bash 中可以用双方括号来测试表达式的值,
此时可以使用通配符进行模式匹配,如:
name=Tom
[ $name = [Tt]?? ]
echo $?
或者:
[[ $name = [Tt]?? ]]
echo $?
检查空值:
[ "$name" = "" ]
[ ! "$name" ]
[ "X${name}" != "X" ]
1.整数测试运算
test int1 -eq int2: 判断两个数是否相等
test int1 -ne int2: 判断两个数是否不相等
test int1 -gt int2: 判断整数1是否大于整数2
test int1 -ge int2: 判断整数1是否大于等于整数2
test int1 -lt int2: 判断整数1是否小于整数2
test int1 -le int2: 判断整数1是否小于等于整数2
整数测试也可以使用 let 命令或双圆括号
相关操作为:== 、!= 、> 、>= 、< 、<=
如:
x=1; [ $x -eq 1 ]; echo $?
x=1; let "$x == 1"; echo $?
x=1; (($x+1>= 2 )); echo $?
两种测试方法的区别:
使用的操作符不同
let 和双圆括号中可以使用算术表达式,而中括号不能
let 和双圆括号中,操作符两边可以不留空格
2.字符串测试运算
test -z string: 判断字符串长度是否为0,即判断字符串是否为空,为空返回真,非空返回假
test -n string: 判断字符串长度是否不为0,即判断字符串是否非空,为空返回假,非空返回真
test str1 =str2:判断两个字符串是否相等
test str1!=str2:判断两个字符串是否不等
如:
name=Tom; [ -z $name ]; echo $?
name2=Andy; [ $name = $name2 ] ; echo $?
3.文件测试运算
test -r filename: 判断用户对文件filename是否有读权限
test -w filename: 判断用户对文件filename是否有写权限
test -x filename:判断用户对文件filename是否有可执行权限
test -f filename: 判断文件filename是否为普通文件
test -d filename: 判断文件filename是否为目录
test -c filename: 判断文件filename是否为字符设备
test -b filename: 判断文件filename是否为块设备
test -s filename: 判断文件filename是否大小不为0
test -t fnum: 判断与文件描述符fnum(默认值为1)相关的设备是否是一个终端设备
4.逻辑运算
test 表达式1 -a 表达式2:与(and)逻辑判断。如果两个表达式同时为真则返回真,否者返回假。
test 表达式1 -o 表达式2:或(or)逻辑判断。只要两个表达式有一个为真则返回真,否则返回假。
如:
x=1; name=Tom;
[ $x -eq 1 �Ca �Cn $name ]; echo $?
注:不能随便添加括号