test命令可以用于检查某个条件是否成立,可以分为数值、字符串、文件、变量四个方面,其中文件的测试包括文件类型、文件权限的判断和两个文件之间的比较。

数值

测试标志 意义 示例
-eq 两数相等 test n1 -eq -n2,n1等于n2返回true。
-ne 两数不等 test n1 -ne -n2,n1不等于n2返回true。
-gt 前者大于后者 test n1 -gt -n2,n1大于n2返回true。
-lt 前者小于后者 test n1 -lt -n2,n1小于n2返回true。
-ge 前者大于等于后者 test n1 -ge -n2,n1大于等于n2返回true。
-le 前者小于等于后者 test n1 -le -n2,n1小于等于n2返回true。

字符串

测试标志 意义 示例
-z 字符串长度为0 test -z str1,str1长度为0,返回true。
-n、string 字符串长度不为0 test -n str2或test str2,str2长度不为0,返回true。
=、== 两字符串相等 test str1 = str2,str1与str2相等,返回true。
!= 两字符串不相等 test str1 != str2,str1与str2不相等,返回true。
< 比较字符串字典顺序 test str1 < str2,按照字典顺序str1在str2之前,返回true。
> 比较字符串字典顺序 test str1 > str2,按照字典顺序str1在str2之后,返回true。

文件

测试标志 意义 示例
-e、-a 文件名是否存在 test -e filename,存在文件名filename,返回true。
-f 文件名是否存在且为文件 test -f filename,存在文件名filename且为文件,返回true。
-d 文件名是否存在且为目录 test -d filename,存在文件名filename且为目录,返回true。
-b 文件名是否存在且为一个block device设备 test -b filename,存在文件名filename且为一个block device设备,返回true。
-c 文件名是否存在且为一个character device设备 test -c filename,存在文件名filename且为character device设备,返回true。
-S 文件名是否存在且为一个Socket文件 test -S filename,存在文件名filename且为一个Socket文件,返回true。
-p 文件名是否存在且为一个FIFO(pipe)文件 test -p filename,存在文件名filename且为FIFO(pipe)文件,返回true。
-L 文件名是否存在且为一个连接文件 test -L filename,存在文件名filename且为一个连接文件,返回true。
-r 文件名是否存在且具有“可读”权限 test -r filename,存在文件名filename且具有“可读”属性,返回true。
-w 文件名是否存在且具有“可写”权限 test -w filename,存在文件名filename且具有“可写”属性,返回true。
-x 文件名是否存在且具有“可执行”权限 test -x filename,存在文件名filename且具有“可执行”属性,返回true。
-u 文件名是否存在且具有“SUID”属性 test -u filename,存在文件名filename且具有“SUID”属性,返回true。
-g 文件名是否存在且具有“SGID”属性 test -g filename,存在文件名filename且具有“SGID”属性,返回true。
-k 文件名是否存在且具有“Sticky bit”属性 test -k filename,存在文件名filename且具有“Sticky bit”属性,返回true。
-s 文件名是否存在且为“非空白文件” test -s filename,存在文件名filename且为非空白文件,返回true。
-nt 前者是否比后者新(根据修改日期)

test filename1 -nt filename2,filename1比filename2新或者filename1存在filename2不存在,返回true。

-ot 前者是否比后者旧(根据修改日期) test filename1 -ot filename2,filename1比filename2旧或者filename2存在filename1不存在,返回true。
-ef 是否为同一文件,可用在硬链接上。判断两个文件是否指向同一个inode test filename1 --ef filename2,filename1与filename2为同一文件,返回true。
-h、-L 文件存在且是符号链接 test -h filename,存在文件名为filname且为符号链接,返回true。
-t 文件描述符打开并指向终端 test -t fd,如果文件描述符fd打开并指向终端,返回true。
-G 文件存在且属于有效组id test -G filename,存在文件名为filname,且属于有效组id,返回true。
-N 文件存在且在最后一次读取后有修改 test -N filename,存在文件名为filname,且在最后一次读取后有修改,返回true。
-O 文件存在且属于有效用户id test -O filename,存在文件名为filname,且属于有效用户id,返回true。

多重条件

测试标志 意义 示例
-a 两个条件同时成立 test -r filename -a -w filename,filename存在且同时具有读写权限,返回true。
-o 任何一个条件成立 test -r filename -o -w filename,filename存在且具有读或写权限,返回true。
! 取反 test ! -x filename ,filename存在且不具有执行权限,返回true。

变量

测试标志 意义 示例
-o shell内建命令set的-o选项是否启用  
-v shell变量是否已赋值  
-R

shell变量是否已赋值并且是名称引用

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐