【Linux shell】while read line
迴圈中的重定向
或許你應該在其他指令碼中見過下面的這種寫法:
while read line
do
…
done < file
剛開始看到這種結構時,很難理解< file是如何與迴圈配合在一起工作的。因為迴圈內有很多條命令,而我們之前接觸的重定向都是為一條命令工作的。這裡有一個原則,這個原則掌握好了,這個問題就很簡單了:
對迴圈重定向的輸入可適用於迴圈中的所有需要從標準輸入讀取資料的命令;
對迴圈重定向的輸出可適用於迴圈中的所有需要向標準輸出寫入資料的命令;
當在迴圈內部顯式地使用輸入或輸出重定向,內部重定向覆蓋外部重定向。
上面的while結構中,read命令是需要從標準輸入中讀取資料的。我們來詳細瞭解一下read命令的用法吧,這個命令是shell指令碼中使用頻率最高的命令之一。
read
先來看一下read的命令語法:
read arg1 arg2 arg3 arg4 …
read是一個用來賦值的命令,它需要從標準輸入獲得值,然後把這些值按位置依次賦值給變數arg1、arg2、arg3、arg4…,輸入的時候以空格作為欄位分隔符。
read的一個最大特性是可以在指令碼中產生互動,因為它從標準輸入讀取資料。read之所以很常用,一是因為我們經常需要賦值,二是因為它可以互動,三是read能夠一次給多個變數賦值。
$ read host ip name
linux 10.0.0.1 licong
$ echo $host $ip $name
linux 10.0.0.1 licong
$
可以看到,linux、10.0.0.1、licong分別被賦值給了變數host、ip和name。再看:
$ read host ip
linux 10.0.0.1 licong
$ echo $host
linux
$ echo $ip
10.0.0.1 licong
$
當我們輸入的欄位比變數數目多時,最後一個變數的值將不只一個欄位,而是所有剩餘的內容;當輸入欄位比變數數少時,多餘的變數將是空值,你可以自己試試。現在我們再來看
while read line
do
…
done < file
read透過輸入重定向,把file的第一行所有的內容賦值給變數line,迴圈體內的命令一般包含對變數line的處理;然後迴圈處理file的第二行、第三行。。。一直到file的最後一行。還記得while根據其後的命令退出狀態來判斷是否執行迴圈體嗎?是的,read命令也有退出狀態,當它從檔案file中讀到內容時,退出狀態為0,迴圈繼續執行;當read從檔案中讀完最後一行後,下次便沒有內容可讀了,此時read的退出狀態為非0,所以迴圈才會退出。
另一種也很常見的用法:
command | while read line
do
…
done
如果你還記得管道的用法,這個結構應該不難理解吧。command命令的輸出作為read迴圈的輸入,這種結構長用於處理超過一行的輸出,當然awk也很擅長做這種事。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2673706/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- while read line 與for迴圈的區別While
- shell指令碼while迴圈、read讀取控制檯輸入與函式指令碼While函式
- [20210930]IFS= read -r line.txt
- Linux Shell指令碼程式設計while語句案例Linux指令碼程式設計While
- Shell程式設計-read命令程式設計
- SAP:CX_SY_READ_SRC_LINE_TOO_LONG解決
- [20201112]centos 7 rc.local shell script on systemd while booting Linux system.tCentOSWhilebootLinux
- 05 Shell read讀取控制檯輸入
- Shell指令碼應用 – for、while迴圈語句指令碼While
- Linux ShellLinux
- Linux read命令的基本使用!Linux
- Linux shell日常使用Linux
- Linux Shell變數Linux變數
- Linux Shell指令碼Linux指令碼
- Linux while 迴圈中使用ssh問題LinuxWhile
- Linux 核心、Shell 簡述Linux
- Linux的shell環境Linux
- Linux中vim和shellLinux
- Linux shell命令總結Linux
- Linux 修改 預設 shellLinux
- linux shell特殊引數Linux
- Linux之shell變數Linux變數
- Linux shell基礎3Linux
- Linux shell基礎1Linux
- Linux shell基礎2Linux
- linux Shell 命令列-03-array Shell 陣列Linux命令列陣列
- 什麼是shell?Linux常用的shell有哪些?Linux
- 什麼是Shell?Linux shell分為幾類?Linux
- 在Linux中,什麼是Linux shell?Linux
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 什麼是shell?Linux中shell有什麼用途?Linux
- Linux下Shell日期的格式Linux
- Linux之shell程式設計Linux程式設計
- linux常用的shell指令碼Linux指令碼
- Linux shell必知必會Linux
- 【linux】Shell中的運算子Linux
- Linux Shell程式設計(1)Linux程式設計
- Linux Shell程式設計(2)Linux程式設計