【test 命令】
命令与结果显示
当需要检测系统中某些文件或属性时,使用 test
命令可以告诉我们相关结果
例如:判断 ~/test
是否存在
可以发现,该命令执行结果并不会显示任何信息,要想获取结果信息,需要通过使用 $?
、&&
、||
来显示
即想要进行结果显示时,其语法如下:
1 | # 使用$?来获取test命令返回值 |
判断文件类型
test
命令可用于某个文件或目录的文件存在与文件类型判断,其命令格式为:test [选项] filename
此时选项如下:
- -e:filename 是否存在
- -f:filename 是否存在且为文件
- -d:filename 是否存在且为目录
- -b:filename 是否存在且为 block device 设备
- -c:filename 是否存在且为 character device 设备
- -S:filename 是否存在且为 socket 文件
- -p:filename 是否存在且为 FIFO 文件
- -L:filename 是否存在且为连接文件
- -s:filename 是否存在且为非空白文件
文件权限检测
test
命令还可用于文件权限检测,其命令格式为:test [选项] filename
此时选项如下:
- -r:filename 是否存在且具有可读权限
- -w:filename 是否存在且具有可写权限
- -x:filename 是否存在且具有可执行权限
- -u:filename 是否存在且具有 SUID 属性
- -g:filename 是否存在且具有 SGID 属性
- -k:filename 是否存在且具有 sticky bit 属性
文件比较
test
命令还可用于两个文件之间的比较,其命令格式为:test file1 [选项] file2
此时选项如下:
- -nt:判断 file1 是否比 file2 新(newer than)
- -ot:判断 file1 是否比 file2 旧(older than)
- -ef:判断 file1 与 file2 是否为同一文件,常用于硬连接的判断,即两个文件是否指向同一个 inode(equal file)
整数判定
test
命令还可用于判定两个整数,其命令格式为:test n1 [选项] n2
此时选项如下:
- -eq:判断 n1 与 n2 是否相等(equal)
- -ne:判断 n1 与 n2 是否不等(not equal)
- -gt:判断 n1 是否大于 n2(greater than)
- -lt:判断 n1 是否小于 n2(less than)
- -ge:判断 n1 是否大于等于 n2(greater than or equal)
- -le:判断 n1 是否小于等于 n2(less than or equal)
字符串数据判定
test
命令还可用于判定字符串数据,其命令格式如下:
test -z str
:判断 str 是否为空串test -n str
:判断 str 是否为非空串test str1=str
:判断 str1 是否等于 str2test str1!=str2
:判断 str1 是否不等于 str2
多重条件判定
当需要使用 test
命令使用多重条件判定时,可采用如下选项:
- -a:两个条件同时成立,例如
test -r file -a -x file
,当 file 同时具有 r、x 权限时返回 true - -o:任何一个条件成立,例如
test -r file -o -x file
,当 file 具有 r 或 x 权限时返回 true - !:条件取反,例如
test ! -r file
,当 file 不具有 r 权限时返回 true
【条件表达式】
在 test
命令中,test
后跟的选项、文件名等统称为条件表达式
对于条件表达式来说,除了使用 test
命令进行测试外,还可以利用判断符号 []
来进行判断
例如:判断 ~/test
是否存在且为目录
对于 []
来说,需要注意的有:
- 为区分通配符、正则表达式等,
[]
内的左右两端需要使用 [Space] 来分隔 []
内每个组件都需要使用 [Space] 来分隔[]
内的变量最好都使用""
括起来[]
内的常量最好都使用''
括起来- 判断选项与
test
命令判断选项相同