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, 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/
原文地址: http://linux.cn/thread/12205/1/1/
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
