Linux while和for循環簡單分析


一、循環重定向

最近遇到了一種新的循環重定向寫法,由於沒看懂,說以網上搜索了一下,然后再此分享一下:

while read line

do

  ......

done  < file

剛開始看,不明白為什么文件內容用重定向方式寫入到循環中,而循環還可以正常接收到參數,並執行循環體中的命令。

之前接觸的重定向只針對一個命令。而對於循環體的重定向有三條原則:

對循環重定向的輸入可適用於循環中的所有需要從標准輸入讀取數據的命令;

對循環重定向的輸出可使用與循環中的所有需要向彼岸准輸出寫入數據的命令;

當在循環內部顯式地使用輸入或輸出重定向,內部重定向覆蓋外部重定向。

在理解上面的循環命令中,read是從標准輸入中讀取數據。我們需要先了解一下read命令。

擴展:

read

read arg1 arg2 ...

可以將標准輸入的值按照順序賦給指定的參數,每個參數名用空格分隔。

---------------------------------------------------------------------
$ 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
---------------------------------------------------------------------
當我們輸入的字段比變量數目多時,最后一個變量的值將不只一個字段,而是所有剩余的內容;
當輸入字段比變量數少時,多余的變量將是空值。

read命令的其他用法及案例,可以查看此鏈接 http://man.linuxde.net/read

 

本文最開始的while循環,原理是,read通過輸入重定向,把file的第一行所有內容復制給變量line,循環體內的命令基本包含

對變量line的處理,然后在循環處理file中的第二行、第三行,以此類推,直到file的最后一行。

while循環如何判斷file文件讀取完了,然后退出循環體呢?read命令也有一個退出狀態,當它從file中有讀取到數據,退出狀態

就為0,當從file文件中未讀取到數據時,退出狀態就非0。然后while循環的條件就不成立,從而退出。

 

使用for循環也能實現相同的結果:

for line in `cat file`

do

  .......

done

 

 

博客參考地址鏈接:http://blog.csdn.net/roler_/article/details/17504039


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM