歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> shell中的&&與||

shell中的&&與||

日期:2017/3/1 9:56:51   编辑:SHELL編程

在linux中前一個命令執行的結果正確,則Linux下面會回傳一個$?=0的值。那麼我們怎麼透過這個回傳值來判斷後續的指令是否要執行呢?這就得要由&&及||的幫忙了!

范例一:使用 ls 查閱目錄 /tmp/abc 是否存在,若存在則用 touch 建立
/tmp/abc/hehe
[root@www ~]# ls /tmp/abc && touch /tmp/abc/hehe
ls: /tmp/abc: No such file or directory
# ls說明找不到該目錄,但幵沒有 touch 癿錯誤,表示 touch 並沒有執行

[root@www ~]# mkdir /tmp/abc
[root@www ~]# ls /tmp/abc && touch /tmp/abc/hehe
[root@www ~]# ll /tmp/abc
-rw-r--r-- 1 root root 0 Feb 7 12:43 hehe

看到了吧?如果 /tmp/abc 不存在時,touch 就不會被執行,若 /tmp/abc 存在的話,那麼 touch 就會開始執行啰!

范例二:測試 /tmp/abc 是否存在,若不存在則建立,若存在不干事
[root@www ~]# rm -r /tmp/abc <==先初除此目錄
[root@www ~]# ls /tmp/abc || mkdir /tmp/abc
ls: /tmp/abc: No such file or directory <==真的不存在喔!
[root@www ~]# ll /tmp/abc
total 0 <==結果出現了!有進行 mkdir

如果我想要建立 /tmp/abc/hehe 這個檔案,但我並不知道 /tmp/abc 是否存在,那該如何是好

范例三:我不清楚 /tmp/abc 是否存在,但就是要建立 /tmp/abc/hehe 檔案
[root@www ~]# ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe

范例三有幾種結果我們來分析一下:

(1) 若 /tmp/abc 不存在故回傳 $?≠0,則 (2)因為 || 遇到非為 0 的 $? 故開始 mkdir /tmp/abc,由於 mkdir /tmp/abc 會成功執行,所以回傳 $?=0 (3)因為 && 遇到 $?=0 故會執行 touch

(2) 若 /tmp/abc 存在故回傳 $?=0,則 (2)因為 || 遇到 0 癿 $? 不會執行,此時 $?=0 繼續向後傳,故 (3)因為 && 遇到$?=0 就開始建立 /tmp/abc/hehe 了!最終 /tmp/abc/hehe 被建立起來。

Copyright © Linux教程網 All Rights Reserved