Linux 中命令鏈接操作符,讓你的代碼更簡潔

?姓名:丁英琦

?學(xué)號:17101223408

?轉(zhuǎn)載自:http://mp.weixin.qq.com/s/px9vtL0hxUHP0xvH02bvYg 有改動

【嵌牛導(dǎo)讀】本文介紹了Linux中的命令鏈接操作符,這些操作符的使用會讓你的程序代碼更加簡潔

【嵌牛鼻子】Linux中的命令鏈接操作符

【嵌牛提問】Linux中有哪些命令鏈接操作符?

【嵌牛正文】

? ? ? ?Linux命令中鏈接的意思是,通過操作符的行為將幾個命令組合執(zhí)行。Linux中的鏈接命令,有些像你在shell中寫短小的shell腳本,并直接在終端中執(zhí)行。鏈接使得自動處理變得更方便。不僅如此,一個無人看管的機(jī)器在鏈接操作符的幫助下能夠十分有條理地運(yùn)行。

Linux中的10個鏈接操作符

本文旨在介紹一些常用的鏈接操作符,通過簡短的描述和相關(guān)的例子幫助讀者提高生產(chǎn)力、降低系統(tǒng)負(fù)載、寫出更加簡短有意義的代碼。

1. 和號操作符 (&)

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

在后臺運(yùn)行一個命令:

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

同時在后臺運(yùn)行兩個命令:

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

2. 分號操作符 (;)

分號操作符使你可以一口氣運(yùn)行幾個命令,命令順序執(zhí)行。

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

上述命令先后執(zhí)行了update和upgrade,最后在當(dāng)前工作目錄下創(chuàng)建了一個‘test’文件夾。

3. 與操作符 (&&)

如果第一個命令執(zhí)行成功,與操作符 (&&)才會執(zhí)行第二個命令,也就是說,第一個命令退出狀態(tài)是0。(譯注:原文的這里明顯寫錯了,我們進(jìn)行了改譯,有興趣的讀者可以參看原文以及原文下面的評論。在UNIX里面,0表示無錯誤,而所有非0返回值都是各種錯誤)。這個命令在檢查最后一個命令的執(zhí)行狀態(tài)時很有用。

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

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

4. 或操作符 (||)

或操作符 (||)很像編程中的else語句。上面的操作符允許你在第一個命令失敗的情況下執(zhí)行第二個命令,比如,第一個命令的退出狀態(tài)是1。

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

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

上面的命令中,由于該用戶不允許更新系統(tǒng),這意味著第一個命令的退出狀態(tài)是’1′,因此最后一個命令‘links tecmint.com‘會執(zhí)行。

如果第一個命令成功執(zhí)行并且退出狀態(tài)是‘0‘呢?很明顯的,第二個命令不會執(zhí)行。

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

這里,用戶在家目錄創(chuàng)建了一個‘test‘文件夾,這是被允許的。命令成功的執(zhí)行,退出狀態(tài)是‘0‘,因此,最后的命令不會執(zhí)行。

5. 非操作符 (!)

非操作符 (!)很像except語句。這個命令會執(zhí)行除了提供的條件外的所有的語句。要理解這點(diǎn),在你的主目錄創(chuàng)建一個目錄‘tecmint’,并‘cd’到它這里。

tecmint@localhost:~$mkdir tecmint

tecmint@localhost:~$cdtecmint

接下來,在文件夾‘tecmint’下創(chuàng)建不同類型的文件。

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

看一下我們在文件夾‘tecmint’創(chuàng)建的新文件。

tecmint@localhost:~/tecmint$ls

a.doca.htmla.pdfa.xmlb.docb.htmlb.pdfb.xml

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

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

驗(yàn)證一下上次的執(zhí)行結(jié)果,使用ls 命令列出可見所有文件。

tecmint@localhost:~/tecmint$ls

a.htmlb.html

6. 與或操作符 (&& – ||)

上面的操作符實(shí)際上是‘與’和‘或’操作符的組合。它很像‘if-else‘語句。

比如,我們ping tecmint.com,如果成功打印‘已驗(yàn)證’,否則打印‘主機(jī)故障’。

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

示例輸出

PINGwww.tecmint.com(212.71.234.61)56(84)bytes ofdata.

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

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

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

---www.tecmint.com pingstatistics---

3packetstransmitted,3received,0%packetloss,time2001ms

rttmin/avg/max/mdev=216.960/222.789/226.423/4.199ms

Verified

現(xiàn)在,斷開我們現(xiàn)在的網(wǎng)絡(luò)連接誒,再試一下相同的命令。

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

實(shí)例輸出

ping:unknown hostwww.tecmint.com

HostDown

7. 管道操作符 (|)

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

tecmint@localhost:~$ ls -l | less

8. 命令合并操作符 {}

合并兩個或多個命令,第二個命令依賴于第一個命令的執(zhí)行。

比如,檢查一下文件‘xyz.txt’是否在Downloads目錄下,如果不存在則創(chuàng)建之并輸出提示信息。

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

但是這樣的命令的運(yùn)行結(jié)果并不如我們預(yù)期的運(yùn)行,會始終都輸出提示信息。因此需要使用{}操作符來合并命令:

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

“The file doesnotexist”

(譯注:原文這里應(yīng)該也是復(fù)制或書寫的時候,出現(xiàn)了一些問題,例子中并沒有出現(xiàn)小標(biāo)題中的”{}”操作符,所以這里我們進(jìn)行了修改)

9. 優(yōu)先操作符 ()

這個操作符可以讓命令以優(yōu)先順序執(zhí)行。

Command_x1 &&Command_x2 || Command_x3 && Command_x4.

在上面的偽代碼中,如果Command_x1執(zhí)行失敗了會怎么樣,Command_x2, Command_x3, Command_x4沒有一個會執(zhí)行,對于這種情況,我們使用優(yōu)先操作符。

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

在上面的偽代碼中,如果Command_x1執(zhí)行失敗,Command_x2不會執(zhí)行,但是Command_x3會繼續(xù)執(zhí)行, Command_x4會依賴于 Command_x3的退出狀態(tài)。

10. 連接符 ($$)

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

tecmint@localhost:~/Downloads$nanotest\

1.txt

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容