test Expression
或
[ Expression
]
描述
test 命令评估
Expression 参数,
如果表达式值为 True,返回一个零(true)退出值。否则, test 命令返回一个非零(false)退出值。
如果没有参数,test
命令也返回一个非零退出值。
注:
<!--[if !supportLists]-->1.
<!--[endif]-->在命令的第二种格式中,[ ](方括号)必须被空白包围。
<!--[if !supportLists]-->2.
<!--[endif]-->必须在 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 退出值。
|
|
String1= String2
|
如果 String1 与 String2 的变量相同,则返回一个
true 退出值。
|
|
String1!=String2
|
如果 String1 与 String2 的变量不相同,则返回一个
true 退出值。
|
|
String1
|
如果 String1 变量不是一个空字符串,则返回一个 true 退出值。
|
|
Integer1 -eq Integer2
|
如果Integer1 与 Integer2
的变量在数学上相等,则返回一个 true 退出值。任一比较 -ne,
-gt, -ge, -lt, -le 可被用来代替 -eq。
|
|
file1 -nt file2
|
如果 file1 比 file2 更新,则为
true。
|
|
file1 -ot file2
|
如果file1 比 file2 旧,则为
true。
|
|
file1 -ef file2
|
如果 file1 是 file2 的另外一个名称,则为
true。
|
这些函数可与下列运算符连在一起:
|
!
|
一元“非”运算符
|
|
-a
|
二进制“与”运算符
|
|
-o
|
二进制“或”运算符(就是说, -a 运算符的优先权比 -o 运算符高)
|
|
\(Expression\)
|
分组括号
|
退出状态
命令返回以下退出值:
|
0
|
Expression 参数为
true。
|
|
1
|
Expression 参数为
false 或丢失。
|
|
>1
|
发生错误。
|
示例
<!--[if
!supportLists]-->1.
<!--[endif]-->为测试一个文件是否存在且非空, 输入:
<!--[if !supportLists]-->2. <!--[endif]-->if test ! -s "$1"
<!--[if !supportLists]-->3. <!--[endif]-->then
<!--[if !supportLists]-->4. <!--[endif]--> echo $1 does not exist or is empty.
fi
如果被第一个位置的参数指定给 shell
过程的文件, $1, 不存在,
test 命令显示一条出错消息。如果 $1
存在且大小大于 0,test
命令什么也不显示。
注:在 -s 函数与文件名之间必须有一空格。
$1 两边的引号确保即使值
$1
为一空字符串, test 也可正常工作。如果引号被省略且 $1
是空字符串,test 命令显示出错消息
test:期望参数。
<!--[if
!supportLists]-->5.
<!--[endif]-->为做一复杂比较,输入:
<!--[if !supportLists]-->6. <!--[endif]-->if [ $# -lt 2 -o ! -e "$1" ]
<!--[if !supportLists]-->7. <!--[endif]-->then
<!--[if !supportLists]-->8. <!--[endif]--> exit
fi
如果给出的 shell 过程少于两个位置参数或被 $1
指定的文件不存在,则 shell 过程退出。特殊 shell 变量
$#
表示了在命令行输入的用以运行 shell
过程的位置参数的个数。