shell脚本-组合测试条件


第一种方式[]

[ EXPRESSION1 -a EXPRESSION2 ]    并且,两个EXPRESSION都为真,结果才为真
[ EXPRESSION1 -o EXPRESSION2 ]    或者,满足其中一个EXPRESSION,结果就为真
[ ! EXPRESSION ]              取反

注:-a 和-o 需要使用测试命令进行,[[]]不支持

例:

[root@CentOS7 ~]# ll test.sh 
-rw-r--r-- 1 root root 0 Jan  8 14:16 test.sh
[root@CentOS7 ~]# FILE=test.sh
[root@CentOS7 ~]# [ -f $FILE -a -x $FILE ];echo $?
1
[root@CentOS7 ~]# chmod +x test.sh
[root@CentOS7 ~]# [ -f $FILE -a -x $FILE ];echo $?
0
[root@CentOS7 ~]# chmod -x test.sh
[root@CentOS7 ~]# [ -f $FILE -o -x $FILE ];echo $?
0
[root@CentOS7 ~]# [ -x $FILE ];echo $?
1
[root@CentOS7 ~]# [ ! -x $FILE ];echo $?
0
[root@CentOS7 ~]# ! [ -x $FILE ];echo $?
0
[root@CentOS7 ~]# 

第二种方式

COMMAND1 && COMMAND2    #并且,短路与,代表条件性的AND THEN
如果COMMAND1成功,将执行COMMAND2,否则将不执行

COMMAND1 || COMMAND2    #或者,短路或,代表条件性的OR ELSE
如果COMMAND1成功,将不执行COMMAND2,否则将执行

!COMMAND             #非,取反

例:

[root@CentOS7 ~]# ping -c1 -W1 10.0.0.70 &> /dev/null && echo '10.0.0.70 is up' || (echo '10.0.0.70 is unreachable'; exit 1) 
10.0.0.70 is up
[root@CentOS7 ~]# NAME=wang;id $NAME &> /dev/null || echo "$NAME is not exist" && echo "$NAME is exist"
wang is exist
[root@CentOS7 ~]# NAME=wanggege;id $NAME &> /dev/null || echo "$NAME is not exist" && echo "$NAME is exist"
wanggege is not exist
wanggege is exist
#如果&&和||混合使用,&&在前,||在后
[root@CentOS7 ~]# NAME=wanggege;id $NAME &> /dev/null && echo "$NAME is exist" || { useradd $NAME; echo $NAME is created; }
wanggege is created