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