濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > 深入理解Bash中的尖括號(hào)(適合初學(xué)者)

深入理解Bash中的尖括號(hào)(適合初學(xué)者)

熱門標(biāo)簽:申請(qǐng)400電話號(hào)碼多少錢 百應(yīng)電銷機(jī)器人靠譜嗎 如何在各種地圖標(biāo)注自己的地址 菏澤crm外呼系統(tǒng)價(jià)格 信陽銷售外呼系統(tǒng)招商 遼寧電銷平臺(tái)外呼系統(tǒng)軟件 coreldraw地圖標(biāo)注 物超所值的400電話申請(qǐng) 營銷電銷機(jī)器人招商

前言

Bash 內(nèi)置了很多諸如 ls、cd、mv 這樣的重要的命令,也有很多諸如 grep、awk、sed 這些有用的工具。但除此之外,其實(shí) Bash 中還有很多可以起到膠水作用的標(biāo)點(diǎn)符號(hào),例如點(diǎn)號(hào)(.)、逗號(hào)(,)、括號(hào)(<>)、引號(hào)(")之類。下面我們就來看一下可以用來進(jìn)行數(shù)據(jù)轉(zhuǎn)換和轉(zhuǎn)移的尖括號(hào)(<>)。

轉(zhuǎn)移數(shù)據(jù)

如果你對(duì)其它編程語言有所了解,你會(huì)知道尖括號(hào) < 和 > 一般是作為邏輯運(yùn)算符,用來比較兩個(gè)值之間的大小關(guān)系。如果你還編寫 HTML,尖括號(hào)作為各種標(biāo)簽的一部分,就更不會(huì)讓你感到陌生了。

在 shell 腳本語言中,尖括號(hào)可以將數(shù)據(jù)從一個(gè)地方轉(zhuǎn)移到另一個(gè)地方。例如可以這樣把數(shù)據(jù)存放到一個(gè)文件當(dāng)中:

ls > dir_content.txt

在上面的例子中,> 符號(hào)讓 shell 將 ls 命令的輸出結(jié)果寫入到 dir_content.txt 里,而不是直接顯示在命令行中。需要注意的是,如果 dir_content.txt 這個(gè)文件不存在,Bash 會(huì)為你創(chuàng)建;但是如果 dir_content.txt 是一個(gè)已有的非空文件,它的內(nèi)容就會(huì)被覆蓋掉。所以執(zhí)行類似的操作之前務(wù)必謹(jǐn)慎。

你也可以不使用 > 而使用 >>,這樣就可以把新的數(shù)據(jù)追加到文件的末端而不會(huì)覆蓋掉文件中已有的數(shù)據(jù)了。例如:

ls $HOME > dir_content.txt; wc -l dir_content.txt >> dir_content.txt

在這串命令里,首先將家目錄的內(nèi)容寫入到 dir_content.txt 文件中,然后使用 wc -l 計(jì)算出 dir_content.txt 文件的行數(shù)(也就是家目錄中的文件數(shù))并追加到 dir_content.txt 的末尾。

在我的機(jī)器上執(zhí)行上述命令之后,dir_content.txt 的內(nèi)容會(huì)是以下這樣:

Applications
bin
cloud
Desktop
Documents
Downloads
Games
ISOs
lib
logs
Music
OpenSCAD
Pictures
Public
Templates
test_dir
Videos
17 dir_content.txt

你可以將 > 和 >> 作為箭頭來理解。當(dāng)然,這個(gè)箭頭的指向也可以反過來。例如,Coen brothers (LCTT 譯注:科恩兄弟,一個(gè)美國電影導(dǎo)演組合)的一些演員以及他們出演電影的次數(shù)保存在 CBActors 文件中,就像這樣:

John Goodman 5
John Turturro 3
George Clooney 2
Frances McDormand 6
Steve Buscemi 5
Jon Polito 4
Tony Shalhoub 3
James Gandolfini 1

你可以執(zhí)行這樣的命令:

sort < CBActors
Frances McDormand 6 # 你會(huì)得到這樣的輸出
George Clooney 2
James Gandolfini 1
John Goodman 5
John Turturro 3
Jon Polito 4
Steve Buscemi 5
Tony Shalhoub 3

就可以使用 sort 命令將這個(gè)列表按照字母順序輸出。但是,sort 命令本來就可以接受傳入一個(gè)文件,因此在這里使用 < 會(huì)略顯多余,直接執(zhí)行 sort CBActors 就可以得到期望的結(jié)果。

如果你想知道 Coens 最喜歡的演員是誰,你可以這樣操作。首先:

while read name surname films; do echo $films $name $surname > filmsfirst.txt; done < CBActors

上面這串命令寫在多行中可能會(huì)比較易讀:

while read name surname films;\

do
echo $films $name $surname >> filmsfirst;\

done < CBActors

下面來分析一下這些命令做了什么:

  • while …; do … done 是一個(gè)循環(huán)結(jié)構(gòu)。當(dāng) while 后面的條件成立時(shí),do 和 done 之間的部分會(huì)一直重復(fù)執(zhí)行;
  • read 語句會(huì)按行讀入內(nèi)容。read 會(huì)從標(biāo)準(zhǔn)輸入中持續(xù)讀入,直到?jīng)]有內(nèi)容可讀入;
  • CBActors 文件的內(nèi)容會(huì)通過 < 從標(biāo)準(zhǔn)輸入中讀入,因此 while 循環(huán)會(huì)將 CBActors 文件逐行完整讀入;
  • read 命令可以按照空格將每一行內(nèi)容劃分為三個(gè)字段,然后分別將這三個(gè)字段賦值給 name、surname 和 films 三個(gè)變量,這樣就可以很方便地通過 echo $films $name $surname >> filmsfirst;\ 來重新排列幾個(gè)字段的放置順序并存放到 filmfirst 文件里面了。

執(zhí)行完以后,查看 filmsfirst 文件,內(nèi)容會(huì)是這樣的:

5 John Goodman
3 John Turturro
2 George Clooney
6 Frances McDormand
5 Steve Buscemi
4 Jon Polito
3 Tony Shalhoub
1 James Gandolfini

這時(shí)候再使用 sort 命令:

sort -r filmsfirst

就可以看到 Coens 最喜歡的演員是 Frances McDormand 了。(-r 參數(shù)表示降序排列,因此 McDormand 會(huì)排在最前面)

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

標(biāo)簽:泰安 玉樹 江門 湖北 廈門 江西 瀘州 內(nèi)江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《深入理解Bash中的尖括號(hào)(適合初學(xué)者)》,本文關(guān)鍵詞  深入,理解,Bash,中的,尖,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入理解Bash中的尖括號(hào)(適合初學(xué)者)》相關(guān)的同類信息!
  • 本頁收集關(guān)于深入理解Bash中的尖括號(hào)(適合初學(xué)者)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    东辽县| 慈溪市| 东乡族自治县| 夏河县| 深泽县| 江源县| 高台县| 阳东县| 屯昌县| 湄潭县| 改则县| 罗甸县| 枞阳县| 庆云县| 长葛市| 霍州市| 德格县| 邳州市| 汉源县| 遂昌县| 长沙县| 青冈县| 通江县| 保山市| 柯坪县| 六盘水市| 富川| 碌曲县| 双城市| 即墨市| 蓝山县| 芒康县| 玉林市| 焦作市| 灵宝市| 德惠市| 古蔺县| 松江区| 岑巩县| 北安市| 罗定市|