test

测试文件、字符串和数值表达式等


语法格式

test expression
[ expression ]

命令简介

test命令主要用于测试各种表达式,根据表达式的计算结果返回适当的结束状态。如果表达式的计算结果为真,返回0;如果表达式的计算结果为假,返回1。

其中,expression可以是文件类型表达式、文件访问权限表达式、文件特性表达式、字符串测试表达式、算术运算表达式,以及逻辑运算表达式等。如果未提供表达式,计算结果为假。如果表达式是单个参数,且为空,计算结果为假。否则计算结果为真。

test命令的另外一种形式是直接使用方括号。例如,“test -e /etc/shells”命令可以改写成“[ -e /etc/shells ]”。注意,方括号与表达式之间至少必须存在一个空格字符,否则会出错。

文件类型表达式

-b file  如果给定的文件存在且是块特殊文件,测试结果为真。

-c file  如果给定的文件存在且是字符特殊文件,测试结果为真。

-d file  如果给定的文件存在且是一个目录,测试结果为真。

-f file  如果给定的文件存在且是一个普通文件,测试结果为真。

-h file  如果给定的文件存在且是一个符号链接文件,测试结果为真(等同于“-L”)。

-L file  如果给定的文件存在且是一个符号链接文件,测试结果为真(等同于“-h”)。

-p file  如果给定的文件存在且是一个管道文件,测试结果为真。

-S file  如果给定的文件存在且是一个套接字,测试结果为真。

-t fd  如果给定文件描述符fd的文件已经打开且与一个终端相关联,测试结果为真。

注意,除了“-h”和“-L”测试,所有符号链接文件的测试均以符号链接文件本身为准,不涉及其引用的文件。

访问权限表达式

-g file  如果给定的文件存在且已设置了setgid标志位,测试结果为真。

-k file  如果给定的文件存在且已设置了黏性标志位,测试结果为真。

-r file  如果给定的文件存在且当前用户可读,测试结果为真。

-u file  如果给定的文件存在且已设置了setuid标志位,测试结果为真。

-w file  如果给定的文件存在且当前用户可写,测试结果为真。

-x file  如果给定的文件存在且当前用户可执行(或检索),测试结果为真。

-G file  如果给定的文件存在且归当前有效用户组ID的用户组拥有,测试结果为真。

-O file  如果给定的文件存在且归当前有效用户ID的用户拥有,测试结果为真。

文件特性表达式

-e file  如果给定的文件存在,测试结果为真。

-s file  如果给定的文件存在且其容量大于0,测试结果为真。

file1 -nt file2  如果给定文件file1的修改日期比file2新,测试结果为真。

file1 -ot file2  如果给定文件file1的修改日期比file2早,测试结果为真。

exp1 -ef file2  如果给定的文件file1file2位于相同的设备,具有相同的信息节点号,测试结果为真。

字符串测试表达式

-n str  如果给定字符串的长度大于0,测试结果为真(“-n”可以省略)。

-z str  如果给定字符串的长度为0,测试结果为真。

str1 = str2  如果给定字符串str1等同于字符串str2,测试结果为真。

str1 != str2  如果给定字符串str1不同于字符串str2,测试结果为真。

str1 < str2  如果给定字符串str1小于字符串str2,测试结果为真。

str1 > str2  如果给定字符串str1大于字符串str2,测试结果为真。

算数运算表达式

exp1 -eq exp2  如果表达式exp1等于exp2,测试结果为真。

exp1 -ge exp2  如果表达式exp1大于或等于exp2,测试结果为真。

exp1 -gt exp2  如果表达式exp1大于exp2,测试结果为真。

exp1 -le exp2  如果表达式exp1小于或等于exp2,测试结果为真。

exp1 -lt exp2  如果表达式exp1小于exp2,测试结果为真。

exp1 -ne exp2  如果表达式exp1不等于exp2,测试结果为真。

注意,在外部的test命令(/usr/bin/test)中,作为一个特殊的表达式,“-l string”可用于计算字符串的长度,因而可以出现在算数运算表达式中。但bash的内置test命令不支持。

逻辑运算表达式

( exp )  如果表达式为真,最终计算结果也为真(括号前需加转义符号“\”)。

! exp  如果表达式为假,最终计算结果为真。

exp1 -a exp2  如果两个表达式均为真,最终计算结果也为真。

exp1 -o exp2  如果两个表达式之一为真,最终计算结果也为真。

应用实例

1. 利用test命令测试指定的目录是否存在,如果目录不存在,利用mkdir命令创建指定的目录。

$ test ! -d somedir && mkdir tempdir
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z