整数测试:做数值大小以及是否相等比较

$A -lt $B:表示是否小于

$A -gt $B:表示是否大于

$A -le $B:是否小于等于

$A -gt $B:是否大于等于

$A -eq $B:表示是否等于

$A -ne $B:表示是否不等于

示例:$A小于$B echo $?为“0”表示成功

[root@bogon ~]# A=10
[root@bogon ~]# B=20
[root@bogon ~]# [ $A -lt $B ]
[root@bogon ~]# echo $?
0


示例:$A大于$B echo $?为“0”表示成功

[root@bogon ~]# A=20
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -gt $B ]
[root@bogon ~]# echo $?
0


示例:$A大于等于$B echo $?为“0”表示成功

[root@bogon ~]# A=20
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -ge $B ]
[root@bogon ~]# echo $?
0


示例:$A小于等于$B echo $?为“0”表示成功

[root@bogon ~]# A=10
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -le $B ]
[root@bogon ~]# echo $?
0


示例:$A等于$B echo $?为“0”表示成功

[root@bogon ~]# A=10
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -eq $B ]
[root@bogon ~]# echo $?
0


示例:$A不等于$B echo $?为“0”表示成功

[root@bogon ~]# A=10
[root@bogon ~]# B=20
[root@bogon ~]# [ $A -ne $B ]
[root@bogon ~]# echo $?
0


字符串测试:ASCII数值越大,字符比较时其值越大

"$A" > "$B":表示是否大于

"$A" < "$B":表示是否小于

"$A" == "$B":表示是否等于

"$A" != "$B":表示是否不等于

-z "$A":表示是否为空

-n "$A":表示是否不空


备注:做字符串比较时,按序比较,字母越靠后代表值越高

示例:$A小于 $B echo $?为“0”表示成功

[root@bogon ~]# A=abc
[root@bogon ~]# B=abd
[root@bogon ~]# [[ "$A" < "$B" ]]
[root@bogon ~]# echo $?
0


示例: $B大于 $A echo $?为“0”表示成功

[root@bogon ~]# A=abc
[root@bogon ~]# B=abd
[root@bogon ~]# [[ "$B" > "$A" ]]
[root@bogon ~]# echo $?
0


示例: $A等于 $B echo $?为“0”表示成功

[root@bogon ~]# A=abc
[root@bogon ~]# B=abc
[root@bogon ~]# [[ "$A" == "$B" ]]
[root@bogon ~]# echo $?
0


示例: $A不等于 $B echo $?为“0”表示成功

[root@bogon ~]# A=abc
[root@bogon ~]# B=ab
[root@bogon ~]# [[ "$A" != "$B" ]]
[root@bogon ~]# echo $?
0


示例:判断$A是否为空,echo $?为“0”表示成功

[root@bogon ~]# A=

[root@bogon ~]# [ -z $A ]

[root@bogon ~]# echo $?

0

[root@bogon ~]# echo $A

[root@bogon ~]#


示例:判断$A是否为不空,echo $?为“0”表示成功

[root@bogon ~]# A=abc
[root@bogon ~]# [ -n $A ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# echo $A
Abc


文件测试:测试文件的存在性以及属性

-e或-a $file:是否存在,存在为“真”, “否则为假”

-f $file:文件是否存在且为普通文件

-d $file:文件是否存在且为目录

-h $file:是否存在且为符号链接文件

-b $file:是否存在且为块设备文件

-c $file:是否存在且为字符设备文件

-S $file:是否存在且为套接字文件

-p $file: 是否存在且为管道文件

-r $file: 当前用户对文件是否拥有读权限

-w $file:当前用户对文件是否拥有写权限

-x $file:当前用户对文件是否拥有执行权限

-u $file:文件是否拥有SUID权限

-g $file:文件是否拥有SGID权限

-k $file:文件是否拥有sticky权限

-O $file: 当前用户是否为指定文件的属主

-G $file: 当前用户是否为指定文件的属组


示例:判断文件是否存在是否存在,存在为“真”, “否则为假”

[root@bogon ~]# [ -e /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ls /root/file -l
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file
[root@bogon ~]#


示例:判断文件是否存在且为普通文件,存在为“真”, “否则为假”

[root@bogon ~]# [ -f /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ls /root/file -l
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file


示例:判断目录是否存在且为普通文件,存在为“真”, “否则为假”

[root@bogon ~]# [ -d /root/ ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll -d /root/
dr-xr-x---. 25 root root 4096 Sep 19 13:12 /root/


示例:判断当前用户对文件是否拥有读权限

[root@bogon ~]# [ -r /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file


示例:判断当前用户对文件是否拥有写权限

[root@bogon ~]# [ -w /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file


示例:判断当前用户对文件是否拥有执行权限

[root@bogon ~]# chmod +x /root/file
[root@bogon ~]# [ -x /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rwxr-xr-x. 1 root root 0 Sep 19 13:12 /root/file


示例:判断当前用户是否为指定文件的属主

[root@bogon ~]# [ -O /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file


示例:判断当前用户是否为指定文件的属组

[root@bogon ~]# [ -G /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file


示例:判断文件是否拥有SUID权限

[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file
[root@bogon ~]# chmod 4644 /root/file
[root@bogon ~]# [ -u /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rwSr--r--. 1 root root 0 Sep 19 13:12 /root/file


示例:判断文件是否拥有SGID权限

[root@bogon ~]# chmod 2644 /root/file
[root@bogon ~]# [ -g /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r-Sr--. 1 root root 0 Sep 19 13:12 /root/file


示例:判断文件是否拥有sticky权限

[root@bogon ~]# chmod 1644 /root/file
[root@bogon ~]# [ -k /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r-T. 1 root root 0 Sep 19 13:12 /root/file


双目操作符:

$file1 -nt $file2: file1是否新于file2, file1的最近一次的修改时间戳是否晚于file2的

$file1 -ot $file2: file1是否旧于file2, file1的最近一次的修改时间戳是否早于file2的

$file1 -ef $file2:file1与file2是否指向了同一个inode;测试二者是否为同一个文件的硬链接


组合测试条件:逻辑运算,表达式组合以及命令组合

逻辑运算:

与:多个条件要同时满足

或:多个条件满足一个即可

非:对指定条件取反


表达式组合:

与:判断文件存在并且是一个普通文件

[root@bogon ~]# [ -e /root/file -a -f /root/file ]
[root@bogon ~]# echo $?
0


或:判断文件是普通文件或者是目录文件

[root@bogon ~]# [ -d /root/file -o -f /root/file ]
[root@bogon ~]# echo $?
0


非:判断文件不是目录文件

[root@bogon ~]# [ ! -d /root/file ]
[root@bogon ~]# echo $?
0


命令组合:

与:COMMAND1 && COMMAND2 COMMAND1执行成功后执行COMMAND2

[root@bogon ~]# touch file && ll file
-rw-r--r-T. 1 root root 0 Sep 19 14:36 file


或:COMMAND1 || COMMAND2 COMMAND1执行不成功后执行COMMAND2

[root@bogon ~]# id alice || useradd alice
id: alice: No such user
[root@bogon ~]# id alice
uid=511(alice) gid=511(alice) groups=511(alice)


非:!COMMAND 对命令取反

[root@bogon ~]# [ -f /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# [ ! -f /root/file ]
[root@bogon ~]# echo $?
1


短路操作符:

&&:COMMAND1 && COMMAND2 COMMAND1执行成功后执行COMMAND2

||: COMMAND1 || COMMAND2 COMMAND1执行不成功后执行COMMAND2

!COMMAND:对命令取反