test 命令
用途
评估条件表达式。
语法
test 表达式
或
[ 表达式 ]
描述
test 命令评估 Expression 参数, 如果表达式值为 True,返回一个零(true)退出值。 否则, test 命令返回一个非零(false)退出值。 如果没有参数,test 命令也返回一个非零退出值。
需求:
- 命令的第二种形式,[ ](方括号)两边必须有空格。
- 必须明确测试 C shell 中的文件名。 文件名替换(全局)导致 shell 脚本退出。
函数与运算符被 test 命令当作独立的参数。 Expression 参数指的是一个需要被检查为 true 或 false 的条件的语句。 下列函数可用来构造此参数:
| 项 | 描述 |
|---|---|
| -b FileName | 如果所指定的 FileName 存在且是一个块特殊文件,那么返回一个 true 退出值。 |
| -c FileName | 如果所指定的 FileName 存在且是一个字符特殊文件,那么返回一个 true 退出值。 |
| -d FileName | 如果所指定的 FileName 存在且是一个目录,那么返回一个 true 退出值。 |
| -e FileName | 如果所指定的 FileName 存在,那么返回一个 true 退出值。 |
| -f FileName | 如果所指定的 FileName 存在且是一个常规文件,那么返回一个 true 退出值。 |
| -g FileName | 如果所指定的 FileName 存在且它的设置组标识位已设置,那么返回一个 true 退出值。 |
| -h FileName | 如果所指定的 FileName 存在且是一个符号链接,那么返回一个 true 退出值。 |
| -k FileName | 如果所指定的 FileName 存在且其粘滞位已设置,那么返回一个 true 退出值。 |
| -L FileName | 如果所指定的 FileName 存在且是一个符号链接,那么返回一个 true 退出值。 |
| -n String1 | 如果 String1 变量的长度为非零,那么返回一个 true 退出值。 |
| -p FileName | 如果所指定的 FileName 存在且是一个命名管道(FIFO),那么返回一个 true 退出值。 |
| -r FileName | 如果所指定的 FileName 存在且可被当前进程读取,那么返回一个 true 退出值。 |
| -s FileName | 如果所指定的 FileName 存在且长度大于零,那么返回一个 true 退出值。 |
| -t FileDescriptor | 如果文件描述符号为 FileDescriptor 的文件是打开的且与一个终端相连,那么返回一个 true 退出值。 |
| -u FileName | 如果所指定的 FileName 存在且它的设置用户标识位已被设置,那么返回一个 true 退出值。 |
| -w FileName | 如果所指定的 FileName 存在且写标志打开,那么返回一个 true 退出值。 但是,FileName 在一个只读的文件系统中不可写,即使 test 指示为 true。 |
| -x FileName | 如果所指定的FileName 存在且执行标志打开,那么返回一个 true 退出值。 如果所指定的文件存在且是一个目录,true 退出值表示当前进程被允许在目录中搜索。 |
| -z String1 | 如果 String1 变量的长度为 0(零),那么返回一个 true 退出值。 |
| 字符串 1= String2 | 如果 String1 与 String2 的变量相同,那么返回一个 true 退出值。 |
| 字符串 1! =字符串 2 | 如果 String1 与 String2 的变量不相同,那么返回一个 true 退出值。 |
| String1 | 如果 String1 变量不是一个空字符串,那么返回一个 true 退出值。 |
| Integer1 -等式 Integer2 | 如果Integer1 与 Integer2 的变量在数学上相等,那么返回一个 true 退出值。 任一比较 -ne, -gt, -ge, -lt, -le 可被 用来代替 -eq。 |
| file1 -nt file2 | 如果 file1 比 file2 更新,那么为 true。 |
| file1 -个 file2 | 如果file1 比 file2 旧,那么为 true。 |
| file1 -ef file2 | 如果 file1 是 file2 的另外一个名称,那么为 true。 |
这些函数可与下列运算符连在一起:
| 项 | 描述 |
|---|---|
| ! | 一元“非”运算符 |
| -a | 二进制“与”运算符 |
| -O | 二进制“或”运算符(就是说, -a 运算符的优先权比 -o 运算符高) |
| \ (表达式\) | 分组括号 |
退出状态
本命令返回以下退出值:
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | Expression 参数为 true。 |
| 第 1 年 | Expression 参数为 false 或丢失。 |
| > 1 | 发生错误。 |
示例
- 要测试文件是否存在且不为空,请输入以下命令:
if test ! -s "$1" then echo $1 does not exist or is empty. fi如果由 shell 过程的第一个位置参数指定的文件,$1,不存在, test 命令显示错误消息。 如果$1存在且大小大于 0 , test 命令不显示任何内容。
注:在 -s 函数与文件名之间必须有一空格。
引号括起$1确保测试正常工作,即使该测试的值为$1是空字符串。 如果省略引号并且$1是空字符串, test 命令显示错误消息test: argument expected.
- 要执行复杂比较,请输入:
if [ $# -lt 2 -o ! -e "$1" ] then exit fi如果提供的 shell 过程少于两个位置参数或指定的文件$1不存在,那么 shell 过程退出。 特殊 shell 变量$#表示在命令行上输入的用于启动此 shell 过程的位置参数的数目。
操作系统和设备管理 中的 Shells 通常描述 shell ,定义有助于理解 shell 的术语,并描述更有用的 shell 函数。
文件
| 项 | 描述 |
|---|---|
| /usr/bin/test | 包含 test 命令。 |