The test
Linux 中的命令是一个命令行实用程序,用于检查和评估条件。
它经常被用在bash 脚本测试文件属性,比较字符串和数字,并支持 AND、OR 和 NOT 运算的复杂逻辑评估。
语法和返回值
的语法test
命令如下:
test expression
or
[ expression ]
返回值:
-
0: 表述正确。
-
1: 这个表述是错误的。
-
2:测试命令发生错误,例如语法错误。
可以使用以下命令检查返回值$?
多变的。
test 5 -eq 5
echo $?
Output:
0
此示例检查整数 5 是否等于 5。表达式为 true,因此返回值为 0。
这是一个选项列表test
命令:
Option |
Description |
-e |
Check if file exists |
-d |
Check if file is a directory |
-f |
Check if file is a regular file |
-h or -L |
Check if file is a symbolic link |
-r |
Check if file is readable |
-w |
Check if file is writable |
-x |
Check if file is executable |
-s |
Check if file is empty |
-nt
-ot
|
Compare file timestamps (newer than, older than) |
-z |
Check if string is null |
-n |
Check if string is not null |
= |
Check if strings are equal |
!= |
Check if strings are not equal |
< |
Lexicographical comparison (less than) |
> |
Lexicographical comparison (greater than) |
-eq |
Equal |
-ne |
Not Equal |
-gt |
Greater Than |
-lt |
Less Than |
-ge |
Greater Than or Equal |
-le 5 |
Less Than or Equal |
-a |
Logical AND |
-o |
Logical OR |
! |
Logical NOT |
文件测试
文件测试是该工具的主要用途之一test
命令。您可以使用特定运算符评估文件的各种属性和条件。
检查文件是否存在
test -e /path/to/file
echo $?
Output:
0
如果指定路径存在该文件,则返回值为 0。如果该文件不存在,则返回值为 1。
检查文件是否是目录
您可以使用-d
检查路径是否指向目录的选项:
test -d /path/to/directory
echo $?
Output:
0
返回值 0 表示路径指向目录,返回值 1 表示否则。
检查文件是否为常规文件
Using -f
选项与test
命令,可以检查该文件是否是普通文件。
test -f /path/to/file
echo $?
Output:
0
返回值 0 表示该路径是常规文件,返回值 1 表示不是。
检查文件是否是符号链接
符号链接是其他文件的快捷方式或引用。
使用-h
or -L
选项与test
命令,可以验证指定路径是否是符号链接。
命令:
test -L /path/to/symbolic_link
echo $?
Output:
0
返回值 0 确认它是符号链接,而返回值 1 表示它不是。
检查文件是否可读
使用-r
选项与test
命令,您可以检查当前用户是否可以读取特定文件。
命令:
test -r /path/to/file
echo $?
Output:
0
返回值0表示文件可读,返回值1表示不可读。
检查文件是否可写
当您需要对其进行更改时,了解文件是否可写至关重要。
The -w
选项与test
命令允许您确定当前用户是否具有特定文件的写权限。
命令:
test -w /path/to/file
echo $?
Output:
0
返回值 0 表示文件可写,返回值 1 表示文件不可写。
检查文件是否可执行
通过使用-x
选项与test
命令,您可以检查当前用户是否可以执行特定文件。
test -x /path/to/executable_file
echo $?
Output:
0
返回值 0 表示该文件可执行,而返回值 1 表示该文件不可执行。
检查文件是否为空
通过使用-s
选项与test
命令,可以判断指定文件是否为空。
test -s /path/to/file
echo $?
Output:
0
返回值 0 表示文件有一些内容,而返回值 1 表示文件为空。
比较文件时间戳
比较文件时间戳对于许多操作都很有用,例如备份或同步。
Using -nt
and -ot
与test
命令,您可以比较两个文件的时间戳。
-nt(较新)
test file1 -nt file2
echo $?
Output:
0
该命令检查是否file1
比file2
。返回值 0 表示file1
确实较新,而返回值 1 表示它不是较新。
-ot(早于)
test file1 -ot file2
echo $?
Output:
0
该命令检查是否file1
比file2
。返回值 0 表示file1
较旧,而返回值 1 表示较旧。
字符串测试
The test
命令提供了用于比较或评估基于文本的值的各种选项。
检查字符串是否为空
通过使用-z
选项,您可以检查特定字符串是否为空。
test -z ""
echo $?
Output:
0
返回值 0 表示字符串为空,返回值 1 表示字符串不为空。
检查字符串是否不为空
The -n
选项与test
命令允许您验证特定字符串是否不为空。
test -n "Hello"
echo $?
Output:
0
返回值 0 表示字符串不为 null,返回值 1 表示字符串为 null。
字符串比较
使用=
and !=
选项与test
命令,您可以比较两个字符串是否相等或不相等。
=(等于)
Command:
test "string1" = "string1"
echo $?
Output:
0
返回值 0 表示字符串相等,返回值 1 表示字符串不相等。
!=(不等于)
Command:
test "string1" != "string2"
echo $?
Output:
0
这检查两个字符串是否不相等。返回值 0 表示字符串确实不相等,而返回值 1 表示字符串相等。
词典比较
词典比较用于根据字符串的字典顺序来比较字符串。
随着test
命令,您可以使用以下命令进行这些比较<
and >
运营商。
test "apple" \< "banana"
echo $?
Output:
0
这会检查字符串“apple”按字典顺序是否位于“banana”之前。返回值 0 表示执行,返回值 1 表示不执行。
>(大于)
test "banana" \> "apple"
echo $?
Output:
0
这会检查字符串“banana”是否按字典顺序出现在“apple”之后。返回值 0 表示执行,返回值 1 表示不执行。
整数比较
The test
命令提供了用于整数比较的各种选项。
Equal
test 5 -eq 5
echo $?
Output:
0
这检查两个整数是否相等。返回值 0 表示数字相等,返回值 1 表示数字不同。
不等于
test 5 -ne 10
echo $?
Output:
0
这检查两个整数是否不相等。返回值 0 表示数字确实不相等,而返回值 1 表示数字相等。
比...更棒
test 10 -gt 5
echo $?
Output:
0
这检查第一个整数是否大于第二个整数。返回值 0 表示第一个数字更大,而返回值 1 表示不是。
少于
test 5 -lt 10
echo $?
Output:
0
这检查第一个整数是否小于第二个整数。返回值 0 表示第一个数字较小,而返回值 1 则表示不是。
大于或等于
test 10 -ge 10
echo $?
Output:
0
这检查第一个整数是否大于或等于第二个整数。返回值 0 表示第一个数字大于或等于,而返回值 1 表示不是。
小于或等于
The -le
选项允许您检查一个整数是否小于或等于另一个整数。
test 5 -le 5
echo $?
Output:
0
返回值 0 表示第一个数字确实小于或等于,而返回值 1 则表示不是。
复合测试
复合测试结合了多种测试条件,允许更复杂的逻辑。 AND、OR 和 NOT 等逻辑运算符可以与test
用于此目的的命令。
逻辑与
test 5 -lt 10 -a 5 -gt 2
echo $?
Output:
0
这会检查 5 是否小于 10 并且大于 2。两个条件都必须为真。
返回值 0 表示两个条件都满足,而返回值 1 表示至少一个条件不满足。
逻辑或
test 5 -lt 3 -o 5 -gt 2
echo $?
Output:
0
这会检查 5 是否小于 3 或大于 2。至少有一个条件必须为真。
返回值 0 表示至少满足一个条件,而返回值 1 表示两个条件都不满足。
逻辑非
test ! 5 -lt 3
echo $?
Output:
0
它检查 5 是否不小于 3。返回值 0 表示满足 NOT 条件(5 不小于 3),而返回值 1 表示不满足。
带括号的分组测试
您可以使用括号对测试进行分组。它有助于控制复杂表达式中的求值顺序。
test \( 5 -lt 10 \) -a \( 5 -gt 2 \)
echo $?
Output:
0
这将检查 5 是否小于 10 且大于 2,条件使用括号进行分组。
括号确保首先评估各个比较,然后应用逻辑 AND。
返回值 0 表示两个条件都满足,而返回值 1 表示至少一个条件不满足。
使用 [ ] 作为替代
方括号[ ]
可以与以下互换使用test
命令。以下是如何使用以下方法重写(大于)[ ]
:
[ $num1 -gt $num2 ]
echo $?
您可以在 Bash 脚本中使用它,如下所示:
#!/bin/bash
num1=$1
num2=$2
if [ $num1 -gt $num2 ]; then
echo "Number1 is greater than Number2."
else
echo "Number1 is not greater than Number2."
fi
该脚本通过检查第一个数字是否大于第二个数字来完成与上一个示例相同的任务。
使用 [[ 表达式 ]] 进行扩展测试
The [[
命令是一个扩展的测试命令,提供更多的功能,并且通常比test
命令。
它对于模式匹配和更复杂的表达式特别有帮助。
[[ 5 -lt 10 && "apple" < "banana" ]]
echo $?
Output:
0
这会检查 5 是否小于 10 并且“apple”按字典顺序位于“banana”之前。
双方括号[[
提供更灵活的方式来组合测试。
返回值 0 表示两个条件都满足,而返回值 1 表示至少一个条件不满足。