首页 > 代码库 > shell中命令间的逻辑关系
shell中命令间的逻辑关系
在shell中命令执行成功返回值为0,不成功返回值为非0
逻辑与:
shell中0为真,非0为假
第一个条件为真时,第二条件必须判断;
第一个条件为假时,第二条件不再判断,最终结果为假;
当第一个命令执行成功继续执行第二个命令,最终结果由第二个命令执行结果决定。
当第一个命令执行失败第二个命令不再执行,最终结果为失败。
理解为乘法运算(0为假1为真)
1*1=1 1*0=0 0*1=0 0*0=0
例:
1、user1存在,前一条命令执行成功,第二条命令执行成功,最终结果为成功(1*1=1)
[root@localhost shell]# id user1 uid=501(user1) gid=501(user1) groups=501(user1) [root@localhost shell]# echo $? 0 [root@localhost shell]# id user1 &> /dev/null && echo Hello user1 Hello user1 [root@localhost shell]# echo $? 0
2、user1不存在,前一条命令执行失败,后一条命令不再执行,最终结果为失败(0*?=0)
[root@localhost shell]# id user1 id: user1: No such user [root@localhost shell]# echo $? 1 [root@localhost shell]# id user1 &>/dev/null && echo Hello user1 [root@localhost shell]# echo $? 1
3、user1 存在 user2不存在 前一条命令执行成功,后一条命令执行失败,命令最终执行失败(1*0=0)
[root@localhost shell]# id user1 uid=501(user1) gid=501(user1) groups=501(user1) [root@localhost shell]# echo $? 0 [root@localhost shell]# id user2 id: user2: No such user [root@localhost shell]# echo $? 1 [root@localhost shell]# id user1 &>/dev/null && id user2 id: user2: No such user [root@localhost shell]# echo $? 1
逻辑或:
shell中0为真,非0为假
第一个条件为真时,第二条件不再判断,最终结果为真;
第一个条件为假时,第二条件必须判断。
当第一个命令执行成功第二个命令不再执行,最终结果为成功。
当第一个命令执行失败继续执行第二个命令,最终结果由第二个命令的执行结果决定。
理解为加法运算(0为假1为真)
0+0=0 1+0=1 1+1=1 0+1=1
1、user1 存在 前一条命令成功 后一条不再执行最终结果为成功(1+?=1)
[root@localhost shell]# id user1 uid=501(user1) gid=501(user1) groups=501(user1) [root@localhost shell]# echo $? 0 [root@localhost shell]# id user1 &>/dev/null || useradd user1 [root@localhost shell]# echo $? 0
2、user1 不存在 前一条命令执行失败,执行第二条命令成功最终结果成功(0+1=1)
[root@localhost shell]# id user1 id: user1: No such user [root@localhost shell]# echo $? 1 [root@localhost shell]# id user1 &>/dev/null || useradd user1 [root@localhost shell]# echo $? 0 [root@localhost shell]# id user1 uid=501(user1) gid=501(user1) groups=501(user1)
3、user1不存在前一条命令执行失败;user2不存在后一条命令执行失败;最终结果失败(0+0=0)
[root@localhost shell]# id user1 id: user1: No such user [root@localhost shell]# echo $? 1 [root@localhost shell]# id user2 id: user2: No such user [root@localhost shell]# echo $? 1 [root@localhost shell]# id user1 &>/dev/null || id user2 &>/dev/null [root@localhost shell]# echo $? 1
执行结果可以使用 ! 来取反使真变假、假变真
[root@localhost shell]# id user1 id: user1: No such user [root@localhost shell]# echo $? 1 [root@localhost shell]# ! id user1 id: user1: No such user [root@localhost shell]# echo $? 0 [root@localhost shell]# id user1 uid=501(user1) gid=501(user1) groups=501(user1) [root@localhost shell]# echo $? 0 [root@localhost shell]# ! id user1 uid=501(user1) gid=501(user1) groups=501(user1) [root@localhost shell]# echo $? 1 [root@localhost shell]# ! id user1 &>/dev/null && useradd user1 [root@localhost shell]# echo $? 1
复合实例
如果user1不存在添加user1,如果存在输出Hello user1
[root@localhost shell]# id user1 id: user1: No such user [root@localhost shell]# id user1 &>/dev/null && echo "Hello user1" || useradd user1 [root@localhost shell]# echo $? 0 [root@localhost shell]# id user1 uid=501(user1) gid=501(user1) groups=501(user1) [root@localhost shell]# id user1 &>/dev/null && echo "Hello user1" || useradd user1 Hello user1
本文出自 “Greg的繁华” 博客,请务必保留此出处http://gregdefanhua.blog.51cto.com/7580626/1563920
shell中命令间的逻辑关系