1. 程式人生 > >Shell指令碼迴圈讀取檔案中的每一行

Shell指令碼迴圈讀取檔案中的每一行

  1. 使用for迴圈
for line in `cat filename`
do
  echo $line
done

或者

for line in $(cat filename)
do
  echo $line
done
  1. 使用while迴圈
while read -r line
do
  echo $line
done < filename

While迴圈中read命令從標準輸入中讀取一行,並將內容儲存到變數line中。在這裡,-r選項保證讀入的內容是原始的內容,意味著反斜槓轉義的行為不會發生。輸入重定向操作符< file開啟並讀取檔案file,然後將它作為read命令的標準輸入。

今天遇到一個問題弄了好久才搞明白:我想在迴圈中動態連結字串,程式碼如下:

for line in `cat filename`
do
  echo ${line}XXYY
done

就是在每一次迴圈過程中給取出來的字串後面新增“XXYY”字元,但是程式就是執行不出來正確的結果。
後來發現是因為我的檔案是才Window下生產的,在Linux下讀取這樣的檔案由於換行符的不同會導致程式執行不出來正確的結果。
解決辦法:在Linux安裝dos2unix小工具,經過該工具轉化以後的檔案再進行讀取就沒有問題了。