偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

理解Bash中的尖括號

系統(tǒng) Linux
Bash 內(nèi)置了很多諸如 ls、cd、mv 這樣的重要的命令,也有很多諸如 grep、awk、sed 這些有用的工具。但除此之外,其實(shí) Bash 中還有很多可以起到膠水作用的標(biāo)點(diǎn)符號,例如點(diǎn)號(.)、逗號(,)、括號(<>)、引號(")之類。

[[257019]]

為初學(xué)者介紹尖括號。

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

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

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

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

  1. ls > dir_content.txt

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

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

  1. 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)容會是以下這樣:

  1. Applications
  2. bin
  3. cloud
  4. Desktop
  5. Documents
  6. Downloads
  7. Games
  8. ISOs
  9. lib
  10. logs
  11. Music
  12. OpenSCAD
  13. Pictures
  14. Public
  15. Templates
  16. test_dir
  17. Videos
  18. 17 dir_content.txt

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

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

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

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

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

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

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

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

  1. while read name surname films;\
  2. do
  3. echo $films $name $surname >> filmsfirst;\
  4. done < CBActors

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

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

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

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

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

  1. sort -r filmsfirst

 

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

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2019-02-12 16:20:24

Bash尖括號命令

2019-03-18 15:53:11

BashLinux花括號

2019-04-22 14:39:05

BashLinux命令

2019-04-15 11:10:34

Bash方括號命令行

2019-03-05 22:15:08

BashLinux命令

2023-01-13 12:37:43

Bashshell花括號

2024-03-04 08:49:44

2019-03-08 11:00:32

BashLinux

2022-12-13 12:55:15

Bash循環(huán)

2023-08-22 21:42:03

Bash函數(shù)

2020-10-29 07:09:07

編程花括號程序員

2022-12-09 07:58:52

Bash條件語句

2011-03-10 14:55:05

JavaScript

2022-11-30 07:47:00

Bash腳本

2022-12-08 12:05:03

Bash字符串

2021-05-11 07:50:31

BashShell腳本

2022-08-31 08:33:54

Bash操作系統(tǒng)Linux

2022-10-24 07:57:47

DebianUbuntuLinux

2020-07-01 18:31:14

Linuxbash永遠(yuǎn)循環(huán)

2014-11-11 15:25:30

PHPWeb
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號