test
语法:test 表达式 或者 [ ]
test命令用于检查某个条件表达式是否成立,他可以进行数值、字符、文件三个方面的测试
- 可以使用[]一对方括号替代test命令,这是test命令的简写形式
- 使用方括号形式的简写时,需要注意方括号內的表达式前后必须要有空格,否则将会报错
- 如果省略表达式,返回false
- 如果表达式为单参数或者时将返回true
- 如果表达式的值为true返回0,如果表达式的值为false返回1
[root@bookcoins ~]# [-d /]
-bash: [-d: command not found
[root@bookcoins ~]# [ -d /]
-bash: [: missing `]'
[root@bookcoins ~]# [ -d / ]
[root@bookcoins ~]# test
[root@bookcoins ~]# echo $?
1
[root@bookcoins ~]# [ ]
[root@bookcoins ~]# echo $?
1
[root@bookcoins ~]# test -d
[root@bookcoins ~]# echo $?
0
[root@bookcoins ~]# [ -b ]
[root@bookcoins ~]# echo $?
0
主要用法如下:
* FILE type tests:: -[bcdfhLpSt]
* Access permission tests:: -[gkruwxOG]
* FILE characteristic tests:: -e -s -nt -ot -ef
* String tests:: -z -n = !=
* Numeric tests:: -eq -ne -lt -le -gt -ge
* Connectives for test:: ! -a -o
test file type
测试文件类型
-b FILE 如果文件存在且为块特殊文件则为真
-c FILE 如果文件存在且为字符特殊文件则为真
-d FILE 如果文件存在且目录则为真
-f FILE 如果文件存在且为普通文件则为真
-h FILE 如果文件存在且为符号链接文件则为真
-L FILE 如果文件存在且为符号链接文件则为真
-p FILE 如果文件存在且为命名管道则为真
-S FILE 如果文件存在且为套接字文件则为真
-t FD 如果文件描述符是在终端打开的则为真
test file permission
测试文件权限
-g FILE 如果文件存在且设置了SGID位则为真
-k FILE 如果文件存在且设置了文件的粘着位则为真
-r FILE 如果文件存在且可读则为真
-u FILE 如果文件存在且设置了SUID位则为真
-w FILE 如果文件存在且可写则为真
-x FILE 如果文件存在且可执行则为真
-O FILE 如果文件存在且属于有效的用户则为真
-G FILE 如果文件存在且属于有效的用户组则为真
test file characteristic
测试文件特性
-e FILE 如果文件存在则为真
-s FILE 如果文件存在且文件大小不为0则为真
FILE1 -nt FILE2 如果文件1比文件2新(根据修改时间确定)或者文件1存在而文件2不存在则为真
FILE1 -ot FILE2 如果文件1比文件2旧(根据修改时间确定)或者文件2存在而文件1不存在则为真
FILE1 -ef FILE2 如果文件1和文件2属于相同的设备和inode节点则为真(即文件1和文件2是彼此的硬链接)
test string
-z STRING 如果字符串的长度为0则为真
-n STRING 如果字符串的长度不为0则为真
STRING1 = STRING2 如果两个字符串相等则为真
STRING1 != STRING2 如果两个字符串不相等则为真
测试字符串,在shell中使用引用字符串测试时需要使用双引号,这个地方需要引起重视,可以从下面这个例子体会下:
[testd@bookcoins ~]$ echo $var1
[testd@bookcoins ~]$ test -n $var1
[testd@bookcoins ~]$ echo $?
0
[testd@bookcoins ~]$ test -n "$var1"
[testd@bookcoins ~]$ echo $?
1
test numberic
测试数值,参数必须是数字
ARG1 -eq ARG2 如果数值1等于数值2则为真
ARG1 -ne ARG2 如果数值1不等于数值2则为真
ARG1 -lt ARG2 如果数值1小于数值2则为真
ARG1 -le ARG2 如果数值1小于等于数值2则为真
ARG1 -gt ARG2 如果数值1大于数值2则为真
ARG1 -ge ARG2 如果数值1大于等于数值2则为真
connectives for test
连接测试,非与或
! EXPR 如果表达式的值为false则为真
EXPR1 -a EXPR2 如果表达式1表达2的值都为true则为真
EXPR1 -o EXPR2 如果表达式1或者表达式2的值为true则为真