目录
test
命令是Unix/Linux Shell中用于执行条件测试的一个非常有用的工具。它可以用来测试文件属性、比较数字、字符串以及其他条件。尽管test
命令的功能强大,但它并不是最容易理解的命令之一,主要是因为它支持多种不同的用法和选项。在很多情况下,test
命令也被写作[
或]
括号形式,尽管严格来说[
和]
是shell内置命令,而test
是一个外部命令。
基本语法
test
命令的基本语法如下:
bash
深色版本
1test [expression]
或者使用括号形式:
bash
深色版本
1[ expression ]
其中expression
是一个或多个由逻辑运算符连接起来的测试条件。
文件测试
test
命令可以用来测试文件的存在性以及其属性。文件测试的格式是:
bash
深色版本
1test -X filename
或者:
bash
深色版本
1[ -X filename ]
其中-X
代表的是一个文件测试运算符,常见的文件测试运算符包括:
-e
:文件存在。-r
:文件可读。-w
:文件可写。-x
:文件可执行。-f
:文件是一个普通文件。-d
:文件是一个目录。-c
:文件是一个字符设备文件。-b
:文件是一个块设备文件。-s
:文件具有非零字节数。
示例:
bash
深色版本
1# 检查文件是否存在并且是普通文件
2if [ -f "/etc/passwd" ]; then
3 echo "The file /etc/passwd exists and it's a regular file."
4else
5 echo "The file /etc/passwd does not exist or is not a regular file."
6fi
数值比较
test
命令也可以用来进行数值的比较。数值比较的格式是:
bash
深色版本
1test NUM1 REL_OP NUM2
或者:
bash
深色版本
1[ NUM1 REL_OP NUM2 ]
其中NUM1
和NUM2
是要比较的数字,REL_OP
是一个关系运算符,常见的关系运算符包括:
-eq
:等于。-ne
:不等于。-lt
:小于。-le
:小于或等于。-gt
:大于。-ge
:大于或等于。
示例:
bash
深色版本
1# 检查两个数字是否相等
2if [ "$num1" -eq "$num2" ]; then
3 echo "Numbers are equal."
4else
5 echo "Numbers are not equal."
6fi
字符串比较
除了文件和数值测试,test
命令还支持字符串比较。字符串比较的格式是:
bash
深色版本
1test STR1 STR_OP STR2
或者:
bash
深色版本
1[ STR1 STR_OP STR2 ]
其中STR1
和STR2
是要比较的字符串,STR_OP
是一个字符串运算符,常见的字符串运算符包括:
-z
:字符串为空。-n
:字符串非空。=
:字符串相等。!=
:字符串不相等。
示例:
bash
深色版本
1# 检查字符串是否为空
2if [ -z "$str" ]; then
3 echo "String is empty."
4else
5 echo "String is not empty."
6fi
逻辑运算符
test
命令支持逻辑运算符来组合多个测试条件:
-a
:逻辑与(AND)。-o
:逻辑或(OR)。
示例:
bash
深色版本
1# 检查文件是否存在并且是可写的
2if [ -e "$filename" -a -w "$filename" ]; then
3 echo "File exists and is writable."
4else
5 echo "File does not exist or is not writable."
6fi
使用括号形式
在很多情况下,test
命令被写作[
或]
括号形式,尽管这种形式实际上是shell的内置命令。使用括号形式时需要注意,所有的运算符和参数之间都需要有空格。
示例:
bash
深色版本
1# 检查文件是否可读
2if [ -r "$filename" ]; then
3 echo "File is readable."
4else
5 echo "File is not readable."
6fi
注意事项
- 当使用
test
命令时,确保所有的运算符和参数之间都有空格。 - 使用括号形式
[
和]
时,注意不要遗漏括号,并且确保括号匹配。 - 在进行数值或字符串比较时,确保两边的类型一致,否则可能会导致意外的结果。
test
命令的返回值是一个状态码,通常0表示成功(真),非0表示失败(假)。