整数测试:做数值大小以及是否相等比较
$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:对命令取反