Linux 命令執行順序的控制

2021-10-24 11:03:47 字數 1857 閱讀 9260

通常情況下,我們每次只能在終端輸入一條命令,按下回車執行,執行完成後,我們再輸入第二條命令,然後再按回車執行…當有時候我們會一次輸入多條命令,這個時候的執行過程又是如何的呢?下面我們將為大家詳細講解下命令的執行順序的控制問題。

當我們需要使用 apt-get 安裝乙個軟體,然後安裝完成後立即執行安裝的軟體或命令工具,又恰巧你的主機才更換的軟體源還沒有更新軟體列表(比如之前我們的環境中,每次重新開始實驗就得 sudo apt-get update,現在已經沒有這個問題了),那麼你可能會有如下一系列操作:

$ sudo apt-get update

# 等待——————————然後輸入下面的命令

$ sudo apt-get install some-tool # 這裡some-tool是指具體的軟體包

# 等待——————————然後輸入下面的命令

$ some-tool

這時你可能就會想:要是我可以一次性輸入完,讓它自己去依次執行各命令就好了,這就是我們這一小節要解決的問題。

簡單的順序執行你可以使用 ; 來完成,比如上述操作你可以:

$ sudo apt-get update;sudo apt-get install some-tool;some-tool # 讓它自己執行
關於上面的操作,不知你有沒有思考過乙個問題,如果我們在讓它自動順序執行命令時,前面的命令執行不成功,而後面的命令又依賴於上一條命令的結果,那麼就會造成花了時間,最終卻得到乙個錯誤的結果,而且有時候直觀的看你還無法判斷結果是否正確。那麼我們需要能夠有選擇性的來執行命令,比如上一條命令執行成功才繼續下一條,或者不成功又該做出其它什麼處理,比如我們使用 which 來查詢是否安裝某個命令,如果找到就執行該命令,否則什麼也不做,雖然這個操作沒有什麼實際意義,但可幫你更好的理解一些概念:

$ which cowsay>/dev/null && cowsay -f head-in ohch~
你如果沒有安裝 cowsay,你可以先執行一次上述命令,你會發現什麼也沒發生,你再安裝好之後你再執行一次上述命令,你也會發現一些驚喜。

上面的 && 就是用來實現選擇性執行的,它表示如果前面的命令執行結果(不是表示終端輸出的內容,而是表示命令執行狀態的結果)返回 0 則執行後面的,否則不執行,你可以從 $? 環境變數獲取上一次命令的返回結果:

學習過 c 語言的使用者應該知道在 c 語言裡面 && 表示邏輯與,而且還有乙個 || 表示邏輯或,同樣 shell 也有乙個 ||,它們的區別就在於,shell 中的這兩個符號除了也可用於表示邏輯與和或之外,就是可以實現這裡的命令執行順序的簡單控制。|| 在這裡就是與 && 相反的控制效果,當上一條命令執行結果為 ≠0($?≠0) 時則執行它後面的命令:

$ which cowsay>/dev/null || echo "cowsay has not been install, please run 'sudo apt-get install cowsay' to install"
除了上述基本的使用之外,我們還可以結合著 && 和 || 來實現一些操作,比如:

我畫個流程圖來解釋一下上面的流程:

Linux 命令執行控制

1 方式 command1 command2 如果command1執行成功,則執行command2 kevin kevin test ll總用量 4 rw rw r 1 kevin kevin 0 9月 11 00 55 1.log kevin kevin test mv 1.log tmp.log...

命令執行順序控制與管道

1.順序執行多條命令,取代輸入一行命令按 enter 執行後在輸入一條命令執行的方式 2.使用which來查詢是否安裝某個命令的方式 上面的 就是用來實現選擇性執行的,它表示如果前面的命令執行結果 不是表示終端輸出的內容,而是表示命令執行狀態的結果 返回0則執行後面的,否則不執行,可以從 環境變數獲...

linux基礎之命令執行順序控制與管道

1.命令執行順序 1.1一句執行完輸入下一句再執行 1.2多句命令同時輸入,用逗號隔開 1.3判斷上句命令是否執行成功再執行下一句命令 用 等 2.管道 將前面程序的輸出作為下乙個程序的輸入 cut 列印每行的某個字段 cut etc passwd c 5 列印 etc passed檔案每行的前五個...