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/