在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