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 如果 String1String2 的变量相同,那么返回一个 true 退出值。
字符串 1! =字符串 2 如果 String1String2 的变量不相同,那么返回一个 true 退出值。
String1 如果 String1 变量不是一个空字符串,那么返回一个 true 退出值。
Integer1 -等式 Integer2 如果Integer1Integer2 的变量在数学上相等,那么返回一个 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 发生错误。

示例

  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.

  2. 要执行复杂比较,请输入:
    if [ $# -lt 2 -o ! -e "$1" ]
    then
       exit
    fi

    如果提供的 shell 过程少于两个位置参数或指定的文件$1不存在,那么 shell 过程退出。 特殊 shell 变量$#表示在命令行上输入的用于启动此 shell 过程的位置参数的数目。

操作系统和设备管理 中的 Shells 通常描述 shell ,定义有助于理解 shell 的术语,并描述更有用的 shell 函数。

文件

描述
/usr/bin/test 包含 test 命令。