Linux中國

Linux中命令鏈接操作符的十個最佳實例

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, 0% packet 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"

實例輸出

ping: unknown 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

今天就到這裡,我會近日開始另外一個有趣的文章。不要走開,繼續關注我們。不要忘記在評論欄里提出有價值的反饋。

via: http://www.tecmint.com/chaining-operators-in-linux-with-practical-examples/

譯者:geekpi 校對:Mr小眼兒

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國