首页 > 代码库 > 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中命令间的逻辑关系