1 -- SHELL讀取檔案的方法
#使用read命令讀取一行資料while read mylinedoecho "LINE:"$mylinedone < datafile.txt
#使用read命令讀取一行資料cat datafile.txt | while read mylinedo echo "LINE:"$mylinedone
#讀取一行資料cat datafile.txt | while myline=$(line)do echo "LINE:"$mylinedone
#讀取一行資料while myline=$(line)do echo "LINE:"$mylinedone < datafile.txt
#使用read命令讀取變數資料cat datafile.txt | while read paraa parab paracdoecho "PARAA:"$paraaecho "PARAB:"$parabecho "PARAC:"$paracdone
#使用read命令讀取變數資料while read paraa parab paracdoecho "PARAA:"$paraaecho "PARAB:"$parabecho "PARAC:"$paracdone < datafile.txt
2 -- read命令的使用方法
read命令從標準輸入讀取一行,並把輸入行的每個欄位(以指定的分隔字元分隔)的值賦給命令列上的變數。
read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]
參數解析:
-e |
|
-r |
指定讀取命令把“\”(反斜線)做為輸入行的一個一般字元,而非控制字元。 |
-s |
安靜模式。如果指定該參數且從終端讀入資料,那麼輸入的時候將不回顯在螢幕上。 |
-u <fd> |
指定讀入資料的檔案描述符,不再使用預設的標準輸入。 |
-t <timeout> |
等待標準輸入的逾時時間,單位為秒。如果在指定的時間內沒有輸入,即時返回。 |
-p <prompt> |
列印提示符,等待輸入,並將輸入賦值給REPLY變數或者指定的變數。 |
-a <array> |
讀入一組詞,依次賦值給數組array。 |
-n <nchars> |
讀取指定的字元數。如果已讀取n個字元,馬上返回,下次從返回點繼續讀取;如果已到行結束,無論滿不滿足n個字元都返回。 |
-d <delim> |
指定行結束符,讀到該字元就當做一行的結束。 |
name ... |
指定read變數。read讀取一行資料後,分隔行資料為各個欄位,然後將欄位依次賦給指定的變數。如果分隔後的欄位數目比指定的變數多,那麼將把剩餘的全部欄位值都賦給最後的那個變數;反之,剩餘的變數被賦值為空白字串。如果read沒有指定變數,系統使用預設的REPLY作為預設變數名。 |
使用重新導向讀取資料
exec 6< datafile.txtwhile read -u 6 mylinedoecho "LINE:"$mylinedone
變數分隔字元
read命令預設的分隔字元是空格,多個空格被當做一個空格處理。我們也可以使用IFS(內部欄位分隔符號)指定的的字元作為分隔字元。假如有如下內容的一個檔案,它以“$”來分隔變數,希望把每個變數區別開來,可以使用如下指令碼:
baidu$google$tencnt$sina123456789
#使用read命令讀取變數資料while read paraa parab parac paraddoecho "PARAA:"$paraaecho "PARAB:"$parabecho "PARAC:"$paracecho "PARAD:"$paraddone < datafile.txt
執行指令碼的輸出如下:
PARAA:baiduPARAB:googlePARAC:tencentPARAD:sinaPARAA:123456789PARAB:PARAC:PARAD:
3 -- 參考資料
1、http://www.linuxsense.org/archives/63.html