语法:
test[expression]
[ [expression] ]
用途:
为了测试Shell脚本里的条件,通过退出状态返回其结果。要特别注意的是:
这个命令的第二种形式,方括号根据字母意义逐字地输入,且必须与括起来的
expression 以空白隔开。
行为模式:
test用了测试文件属性、比较字符串及比较数字。
警告
POSIX风格的表达式只是在真是系统上是可用表达式的一个子集。需留意可移植性的问题。
除了极旧的UNIX系统外,test都已内置于Shell中。由于内置命令会比外部命令先被找到,
所以,要写一个简单的测试程序并将其执行文件命名为test会有点麻烦。这种情况下你必须以
./test 引用这样的程序(假设它们在当前目录内)。
主要选项与表达式
运算符 如果。。。。则为真
string string 不是null
-b file file是块设备文件
-c file file是字符设备文件
-d file file是目录
-e file file存在
-f file file为一般文件
-g file file有设置它的setgid位
-h file file是一符号链接
-L file file是一符号链接(等同于 -h)
-n string string是非null
-p file file是一命名的管道(FIFO文件)
-r file file是可读的
-S file file是socket
-s file file不是空的
-t n 文件描述符n指向一终端
-u file file有设置它的setuid位
-w file file是可写入的
-x file file是可执行的,或file是可被查找的目录
-z string string为null
s1 = s2 字符串s1与s2相同
s1 != s2 字符串s1与s2不相同
n1 -eq n2 整数n1等于n2
n1 -ne n2 整数n1不等于n2
n1 -lt n2 n1小于n2
n1 -gt n2 n1大于n2
n1 -le n2 n1小于或等于n2
n1 -ge n2 n1大于或等于n2
POSIX的test算法
参数 参数值 结果
0 退出状态为伪(1)
````````````````````````````````````````````````````````````````````````````````````````````````````````````
1 如果$1非null 退出状态为真(0)
如果$1为null 退出状态为伪(1)
·············································································································
2 如果$1为! 否定单一参数测试的结果,$2
如果$1为一元运算符 运算符的测试结果
其他情况 未定义
————————————————————————————————————
3 如果$2为二元运算符 运算符的测试结果
如果$1为! 否定双参数测试的结果,$2 $3
如果$1是(且$3是) 单一参数测试的结果,$2(XSI)
其他情况 未定义
------------------------------------------------------------------------------------------------------------------
4 如果$1为! 否定三个参数测试的结果,$2 $3 $4
如果$1是(且$4是) 两参数测试的结果,$2 $3(XSI)
其他情况 未定义
---------------------------------------------------------------------------------------------------------------------
>4 未定义