天天看點

Linux中的連結運算符詳解 - 提高程式設計效率與性能

作者:冷凍工廠

Linux 指令的連結意味着,組合多個指令并根據它們之間使用的操作符的行為使它們執行。

Linux 中的指令鍊就像您在 shell 本身編寫簡短的 shell 腳本,然後直接從終端執行它們。連結使得流程自動化成為可能。

此外,無人值守的機器可以在連結操作員的幫助下系統地運作。

本文[1]旨在闡明常用的指令鍊運算符。它提供了簡短的描述和相應的示例,可以提高您的工作效率,使您能夠編寫簡潔、有意義的代碼,同時有時會減少系統負載。

1. 與号運算符 (&) – 在背景運作 Linux 指令

‘&’的作用是讓指令在背景運作。隻需鍵入指令,後跟空格和“&”。您可以在背景一次性執行多個指令。

在背景運作一個名為“ping”的 Linux 指令:

ping -c5 www.tecmint.com &
           

同時在背景運作兩個或多個 apt 指令:

apt update & apt upgrade &
           

2. 分号運算符 (;) – 運作多個指令

分号 (;) 運算符使得可以一次運作多個指令,并且指令的執行按順序發生。

apt update ; apt upgrade ; mkdir test
           

上述指令組合将首先執行更新指令,然後執行更新指令,最後在目前工作目錄下建立一個“test”目錄。

3. AND 運算符 (&&) – 成功後運作第二個指令

如果第一個指令執行成功,即第一個指令的退出狀态為 0,則 AND 運算符 (&&) 僅執行第二個指令。該指令在檢查最後一個指令的執行狀态時非常有用。 例如,我想在終端中使用 links 指令通路網站 howtoing.com,但在此之前,我需要檢查主機是否線上。

ping -c3 www.tecmint.com && links www.tecmint.com
           

4. OR 運算符 (||) – 條件指令執行

OR 運算符 (||) 很像程式設計中的“else”語句。 ||運算符允許您僅在第一個指令執行失敗時才執行第二個指令,即第一個指令的退出狀态為“1”。

例如,我想從非 root 帳戶執行“apt update”,如果第一個指令失敗,則将執行第二個“links www.howtoing.com”指令。

apt update || links tecmint.com
           

在上面的指令中,由于不允許使用者更新系統,這意味着第一個指令的退出狀态為“1”,是以最後一個指令“links howtoing.com”被執行。

如果第一個指令成功執行,退出狀态為“0”怎麼辦?明顯地!第二個指令不會執行。

mkdir test || links tecmint.com
           

在這裡,使用者在其主目錄中建立一個允許使用者使用的檔案夾“test”。指令執行成功,退出狀态為“0”,是以指令的最後部分未執行。

5. NOT 運算符 (!) – 選擇性執行指令

NOT 運算符 (!) 很像“ except ”語句。該指令将執行除提供的條件之外的所有指令。要了解這一點,請在主目錄中建立一個目錄“howtoing”并“cd”到該目錄。

mkdir tecmint 
cd tecmint
           

接下來,在檔案夾“howtoing”中建立幾種類型的檔案。

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

看到我們已經在檔案夾“howtoing”中建立了所有新檔案。

ls 

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

現在使用 rm 指令以巧妙的方式一次性删除除“html”檔案之外的所有檔案。

rm -r !(*.html)
           

隻是為了驗證,最後執行。使用 ls 指令列出所有可用檔案。

ls 

a.html  b.html
           

6. AND – OR 運算符 (&& – ||) – 指令的條件執行

上述運算符是“AND”和“OR”運算符的組合。它很像“if-else”語句。

例如,讓我們對 howtoing.com 執行 ping 操作,如果成功則回顯“Verified”,否則回顯“Host Down”。

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
           

現在,斷開網際網路連接配接,然後再次嘗試相同的指令。

ping -c3 www.tecmint.com && echo "verified" || echo "Host Down"
           

示例輸出:

ping: unknown host www.tecmint.com 
Host Down
           

7. PIPE 運算符 (|) – 簡化的輸出處理

當第一個指令的輸出充當第二個指令的輸入時,此 PIPE 運算符非常有用。例如,将“ls -l”的輸出通過管道傳輸到“less”并檢視指令的輸出。

ls -l | less

drwx------  tecmint tecmint  4.0 KB Thu Nov 16 12:03:02 2023 AnyDesk
drwxrwxr-x  tecmint tecmint  4.0 KB Tue Oct 10 10:44:35 2023 bin
drwxr-xr-x  root    root     4.0 KB Wed Nov 24 22:05:09 2021 DEBIAN
           

8.指令組合運算符{}

組合兩個或多個指令,第二個指令取決于第一個指令的執行。

例如,檢查目錄“bin”是否可用,并輸出相應的輸出。

[ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists.
           

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。

nano test\(1\).txt
           

Reference

[1]Source: https://www.tecmint.com/chaining-operators-in-linux-with-practical-examples/

繼續閱讀