2018年8月19日 星期日

bash shell 迴圈寫法

在bash shell 中的迴圈有三種主要寫法:

  1. For Loop
  2. While Loop
  3. Until Loop



< for loop>

a. 清單式
for Variable in List ; do 
   ... 
done
 example:
 for myFiles  in  test*
    echo $myFiles
done 
優點:處理檔案、資料,或是在某資料夾中沒有命名規則的檔案
缺點:若需要處理有index 的時候,可以使用其他迴圈寫法較為方便,否則就需要於建立清單時將此index寫入,如:
bgn=0; int=1; end=10;
for i in ${ seq $bgn $int $end }; do
   ...
done

b. 雙括號式
for (( 初始值; 迴圈結束判斷; 步進值 )); do
    ...
done

example:
bgn=0; end=10
for ((  i = bgn ; i <= end; i ++ ))
  ...
done 

雙括號式的變數為迴圈index,故利於處理具有index的檔案,或是單純的迴圈計算。
i++ 也可以寫成++ i,若要改變步進值,可以直接寫成i+=n


c. 大括號式
for Variable in { 初始值..終止值..步進值}; do
    ...
done
若只是單純處理某區間的迴圈,如1~10,這種寫法和b.差不多;但若要進行一些終止邏輯判斷,此寫法不適合。

example:
bgn=0; end=10
 for i in {bgn..end}; do
    ...
 done
Note:在某些版本(或機器?)上,無法指定步進值,只能令步進值為1,若指定的步進值不為1 則會出錯。 => 原因尚不明,近期也不會深究。


<While Loop>


While [ condition ]; do
    ... 
done
當condition 為真,便執行迴圈。如;
i = 1
whle [ $i -lt  10 ]; do 
   ... 
   i= expr ` $i + 1 
done 

也可以不使用條件判斷,而是在迴圈內部控制:
while : ; do
   ...
done 

While 指令也可以用來讀取資料,一次讀取一行:
read fileName
while read line; do
      echo " $line"
done 
<Until Loop>

Until [ condition ];  do
    ...
done 
Until loop 一般比較少用到,因為它的概念其實和while 迴圈類似:
    while 是[ condition]成立會執行迴圈;
    until則是[condition]不成立,才會執行迴圈。
或是換句話說:
    當while的條件為真,迴圈執行;
    當Until 的條件為真,迴圈馬上停止。


<Continue、break>

不論是哪一種迴圈,這兩個指令都適用。
只要在迴圈中遇到continue指令,就會立刻回到迴圈的開頭,重複執行;
若是遇到break指令,就會立刻離開迴圈。




沒有留言:

張貼留言