格式一shell
1 for var in list 2 do 3 commands 4 done
格式二安全
1 for var in list;do
list參數中,需提供迭代中使用的一系列值,能夠經過多種方式制定List列表中的值。bash
1.1 讀取列表中的值
for的基本用法就是遍歷for名利自身所定義的一系列值。spa
在最後一次迭代後,$test變量的值會在shell腳本的剩餘部分保持有效。它會一直保持最後一次迭代的值(除非你修改了它)
1.2 讀取列表中複雜的值命令行
for循環List每一個值用空格分割,當列表中有單引號或者空格時,遍歷時會出現錯誤,有兩種解決辦法: 3d
1.3 從變量讀取列表中的值
code
將一系列的值都集中存儲在一個變量中,而後須要遍歷變量中的整個列表。htm
1.4 從命令中讀取值
blog
有兩種方式能夠將命令輸出賦值給變量:
1.5 更改字段分隔符
上面的例子存在一個問題,就是若是命令中數值是有空格的話,for依然將它每一個單詞做爲單獨的值。形成這個問題的緣由是特殊的環境變量IFS,叫做內部字段分隔符。
默認狀況下,bash shell會將下列字符看成字段分隔符:
若是bash shell在數據中看到這些字符中的任意一個,它就會假定這代表了列表中一個新數據字段的開始。
1.5.1 想修改IFS的值,使其只能識別換行符,那就必須:
1 IFS=$'\n'
將這個語句加入到腳本中,告訴bash shell在數據值中忽略空格和製表符。
1.5.2 一個可參考的安全實踐是在改變IFS以前保存原來的IFS值,以後再恢復它。
1 IFS.OLD=$IFS 2 IFS=$'\n' 3 <在代碼中使用新的IFS值> 4 IFS=$IFS.OLD
這就保證了在腳本的後續操做中使用的是IFS的默認值。
1.5.3 遍歷一個文件中用冒號分隔的值:
1 IFS=:
1.5.4 若是要指定多個IFS字符,只要將它們在賦值行串起來就行。
1 IFS=$'\n':;"
這個賦值會將換行符、冒號、分號和雙引號做爲字段分隔符。如何使用IFS字符解析數據沒有任何限制。
1.6 用通配符讀取目錄
for命令自動遍歷目錄中文件,進行此操做必須在文件名或路徑名中使用通配符。
1 for file in /proc/*; 2 do 3 echo $file is file path \! ; 4 done
1 for((expr1; expr2; expr3)) 2 do 3 command 4 command 5 ... 6 done
有些部分並無遵循bash shell標準的for命令:
也可使用多個變量,但卻只能在for循環中定義一種條件。
使用類C風格for循環要注意如下事項:
將結果重定向到output.txt文件,不輸出到屏幕
1 done > output.txt