next up previous contents
Next: while 迴圈 Up: 迴圈 Previous: 迴圈   Contents

for 迴圈

  1. for 迴圈適合已知迴圈次數狀況,語法:
    for ((初始值; 限制值; 執行步階))
    do
    	程式段
    done
    
  2. for 括號內的三串內容意義為:
    1. 初始值:某個變數在迴圈當中的起始值,例如 i=1
    2. 限制值:當變數的值在這個限制值的範圍內,就繼續進行迴圈。例如 i<=100
    3. 執行步階:每作一次迴圈時,變數的變化量。例如 i=i+1
  3. 例題:從 1 加到第 1 個指定的數字,但必須判斷參數是大於 1 且小於 100 的數字。
    [dywang@dywmac zzz]$ cat sh11.sh 
    #!/bin/bash
    num=$(echo $1 | egrep -o "[0-9]+")
    [ -n "$num" ] && [ "$num" -gt 1 ] && [ "$num" -lt "100" ] \
    &&  max="$num" || max="100"
    sum=0
    for ((i=1; i<$max; i++)); do
    	((sum+=$i))
    done
    echo "1+..+$max=$sum"
    
  4. 執行結果。
    [dywang@dywmac zzz]$ sh sh11.sh
    1+..+100=4950
    [dywang@dywmac zzz]$ sh sh11.sh num
    1+..+100=4950
    [dywang@dywmac zzz]$ sh sh11.sh -12
    1+..+12=66
    [dywang@dywmac zzz]$ sh sh11.sh 201
    1+..+100=4950
    [dywang@dywmac zzz]$ sh sh11.sh 56
    1+..+56=1540
    
  5. 非數字的迴圈語法:
    for var in con1 con2 con3 ...
    do
    	程式段
    done
    
  6. 例題:從腳本執行參數取出所有數字加總,並印出數式加總數學式及總和。先使用 egrep 過濾參數中的數字,非數字 for 迴圈將這些以空白隔開的數字加總。
    [dywang@dywmac zzz]$ cat sh12.sh 
    #!/bin/bash
    num=$(echo $@ | egrep -o "[0-9]+")
    sum=0
    for i in $num; do
    	((sum+=$i))
    done
    echo "$(echo $num | sed 's/\ \ */+/g')=$sum"
    
  7. 執行結果。
    [dywang@dywmac zzz]$ sh sh12.sh 12x34f56fe328fad
    12+34+56+328=430
    [dywang@dywmac zzz]$ sh sh12.sh 12 74n 23d wf3
    12+74+23+3=112
    



2019-06-17