表达式测试包括字符串测试、整数测试、文件测试及逻辑测试。

内置测试命令 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 –a –n $name ]; echo $?

注:不能随便添加括号