歡迎光臨
每天分享高質量文章

Linux 中命令鏈接運算子,讓你的代碼更簡潔!

來源:嵌入式資訊精選

ID:mcuworld

Linux命令中鏈接的意思是,通過運算子的行為將幾個命令組合執行。Linux中的鏈接命令,有些像你在shell中寫短小的shell腳本,並直接在終端中執行。鏈接使得自動處理變得更方便。不僅如此,一個無人看管的機器在鏈接運算子的幫助下能夠十分有條理地運行。

Linux中的10個鏈接運算子


本文旨在介紹一些常用的鏈接運算子,通過簡短的描述和相關的例子幫助讀者提高生產力、降低系統負載、寫出更加簡短有意義的代碼。


1. 和號運算子 (&)


‘&’的作用是使命令在後臺運行。只要在命令後面跟上一個空格和 ‘&’。你可以一口氣在後臺運行多個命令。


在後臺運行一個命令:


tecmint@localhost:~$ ping ­c5 www.tecmint.com &


同時在後臺運行兩個命令:


root@localhost:/home/tecmint# apt-get update & mkdit test &


2. 分號運算子 (;)


分號運算子使你可以一口氣運行幾個命令,命令順序執行。


root@localhost:/home/tecmint# apt-get update ; apt-get upgrade ; mkdir test


上述命令先後執行了update和upgrade,最後在當前工作目錄下創建了一個‘test’檔案夾。


3. 與運算子 (&&)


如果第一個命令執行成功,與運算子 (&&)才會執行第二個命令,也就是說,第一個命令退出狀態是0。(譯註:原文的這裡明顯寫錯了,我們進行了改譯,有興趣的讀者可以參看原文以及原文下麵的評論。在UNIX裡面,0表示無錯誤,而所有非0傳回值都是各種錯誤)。這個命令在檢查最後一個命令的執行狀態時很有用。


比如,我想使用links 命令在終端中訪問網站tecmint.com,但在這之前我需要檢查主機是否在線或不在線。


root@localhost:/home/tecmint# ping -c3 www.tecmint.com && links www.tecmint.com


4. 或運算子 (||)


或運算子 (||)很像編程中的else陳述句。上面的運算子允許你在第一個命令失敗的情況下執行第二個命令,比如,第一個命令的退出狀態是1。


舉例來說,我想要在非root帳戶中執行‘apt-get update‘,如果第一個命令失敗了,接著會執行第二個命令‘links www.tecmint.com‘。


tecmint@localhost:~$ apt-get update || links tecmint.com


上面的命令中,由於該用戶不允許更新系統,這意味著第一個命令的退出狀態是’1′,因此最後一個命令‘links tecmint.com‘會執行。


如果第一個命令成功執行並且退出狀態是‘0‘呢?很明顯的,第二個命令不會執行。


tecmint@localhost:~$ mkdir test || links tecmint.com


這裡,用戶在家目錄創建了一個‘test‘檔案夾,這是被允許的。命令成功的執行,退出狀態是‘0‘,因此,最後的命令不會執行。


5. 非運算子 (!)


非運算子 (!)很像except陳述句。這個命令會執行除了提供的條件外的所有的陳述句。要理解這點,在你的主目錄創建一個目錄‘tecmint’,並‘cd’到它這裡。


tecmint@localhost:~$ mkdir tecmint

tecmint@localhost:~$ cd tecmint


接下來,在檔案夾‘tecmint’下創建不同型別的檔案。


tecmint@localhost:~/tecmint$ touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html


看一下我們在檔案夾‘tecmint’創建的新檔案。


tecmint@localhost:~/tecmint$ ls

 

a.doc  a.html  a.pdf  a.xml  b.doc  b.html  b.pdf  b.xml


用一種聰明的辦法馬上刪除除了 ‘html’之外的所有檔案。


tecmint@localhost:~/tecmint$ rm -r !(*.html)


驗證一下上次的執行結果,使用ls 命令列出可見所有檔案。


tecmint@localhost:~/tecmint$ ls

 

a.html  b.html


6. 與或運算子 (&& – ||)


上面的運算子實際上是‘與’和‘或’運算子的組合。它很像‘if-else‘陳述句。


比如,我們ping tecmint.com,如果成功打印‘已驗證’,否則打印‘主機故障’。


tecmint@localhost:~/tecmint$ ping -c3 www.tecmint.com && echo “Verified” || echo “Host Down”


示例輸出


PING www.tecmint.com (212.71.234.61) 56(84) bytes of data.

64 bytes from www.tecmint.com (212.71.234.61)icmp_req=1 ttl=55 time=216 ms

64 bytes from www.tecmint.com (212.71.234.61)icmp_req=2 ttl=55 time=224 ms

64 bytes from www.tecmint.com (212.71.234.61)icmp_req=3 ttl=55 time=226 ms

 

— www.tecmint.com ping statistics —

3 packets transmitted, 3 received, 0packet loss, time 2001ms

rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms

Verified


現在,斷開我們現在的網絡連接誒,再試一下相同的命令。


tecmint@localhost:~/tecmint$ ping -c3 www.tecmint.com && echo “verified” || echo “Host Down”


實體輸出


pingunknown host www.tecmint.com

Host Down


7. 管道運算子 (|)


PIPE在將第一個命令的輸出作為第二個命令的輸入時很有用。比如,‘ls -l’的輸出通過管道到‘less’,並看一下輸出。


tecmint@localhost:~$ ls -l | less


8. 命令合併運算子 {}


合併兩個或多個命令,第二個命令依賴於第一個命令的執行。


比如,檢查一下檔案‘xyz.txt’是否在Downloads目錄下,如果不存在則創建之並輸出提示信息。


tecmint@localhost:~$ [ -f /home/tecmint/Downloads/xyz.txt ] || touch /home/tecmint/Downloads/xyz.txt; echo “The file does not exist”


但是這樣的命令的運行結果並不如我們預期的運行,會始終都輸出提示信息。因此需要使用{}運算子來合併命令:


tecmint@localhost:~$ [ –f /home/tecmint/Downloads/xyz1.txt ] || {touch /home/tecmint/Downloads/xyz.txt; echo “The file does not exist”}

 

The file does not exist


(譯註:原文這裡應該也是複製或書寫的時候,出現了一些問題,例子中並沒有出現小標題中的”{}”運算子,所以這裡我們進行了修改)


9. 優先運算子 ()


這個運算子可以讓命令以優先順序執行。


Command_x1 &&Command;_x2 || Command_x3 && Command_x4.


在上面的偽代碼中,如果Command_x1執行失敗了會怎麼樣,Command_x2, Command_x3, Command_x4沒有一個會執行,對於這種情況,我們使用優先運算子。


(Command_x1 &&Command;_x2) || (Command_x3 && Command_x4)


在上面的偽代碼中,如果Command_x1執行失敗,Command_x2不會執行,但是Command_x3會繼續執行, Command_x4會依賴於 Command_x3的退出狀態。


10. 連接符 ($$)


連接符 ()如它名字所說,被用於連接shell中那些太長而需要分成多行的命令。可以在輸入一個“\”之後就回車,然後繼續輸入命令列,直到輸入完成。比如,下麵的命令會打開文本檔案test(1).txt。


tecmint@localhost:~/Downloads$ nano test \

1.txt

《Linux雲計算及運維架構師高薪實戰班》2018年08月27日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~

    *宣告:推送內容及圖片來源於網絡,部分內容會有所改動,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯繫我們刪除或授權事宜。

    – END –


    更多Linux好文請點擊【閱讀原文】

    ↓↓↓

    赞(0)

    分享創造快樂