1. 程式人生 > >Linux Shell程式設計 迴圈語法

Linux Shell程式設計 迴圈語法

for迴圈

for 迴圈是固定迴圈,也就是在迴圈時已經知道需要進行幾次迴圈。有時也把 for 迴圈稱為計數迴圈。
語法:

for 變數 in 值1 值2 值3…
do
程式
done

在這種語法中,for 迴圈的次數取決於 in 後面值的個數(以空格分隔),有幾個值就迴圈幾次,並且每次迴圈都把值賦予變數。也就是說,假設 in 後面有三個值,for 會迴圈三次,第一次迴圈會把值 1 賦予變數,第二次迴圈會把值 2 賦予變數,以此類推。

示例:列印時間。

[[email protected] ~]# vi sh/for.sh
#!/bin/bash 列印時間
for
time in morning noon afternoon evening do echo "This time is $time!" done

in 值後面有 4 個字串,所以這個 for 會迴圈 4 次。每次迴圈會依次把字串賦予變數 time,所以這個指令碼會迴圈 4 次,並依次輸出"morning noon afternoon evening"這 4 個字串。 

for ((初始值;迴圈控制條件;變數變化))
do
程式
done
  • 初始值:在迴圈開始時,需要給某個變數賦予初始值,如 i=1。
  • 迴圈控制條件:用於指定變數迴圈的次數,如 i<=100,則只要 i 的值小於等於 100,迴圈就會繼續。
  • 變數變化:每次迴圈之後,變數該如何變化,如 i=i+1,代表每次迴圈之後,變數的值都加 1。

示例:從 1 加到 100 

#!/bin/bash
#從 1 加到100
s=0
for(( i=1;i<=100;i=i+1))
#定義迴圈100次
do
s=$(($s+$i))
#每次迴圈給變數s賦值
done
echo "The sum of 1+2+..+100 is : $s"
#輸出從1加到100的和

用函式實現從 1 加到 mun的和:

[[email protected] ~]# vi sh/function.sh
#!/bin/bash
#接收使用者輸入的數字,然後從1加到這個數字
function sum () { #定義函式sum s=0 for (( i=0;i<=$1;i=i+1 )) #迴圈直到i大於$1為止。$1是函式sum的第一個引數 #在函式中也可以使用位置引數變數,不過這裡的$1指的是函式的第一個引數 do s=$(( $i+$s )) done echo "The sum of 1+2+3...+$1 is : $s" #輸出從1加到$1的和 } read -p "Please input a number: " -t 30 num #接收使用者輸入的數字,並把值賦予變數num y=$(echo $num 丨 sed 's/[0-9]//g') #把變數num的值替換為空,並賦予變數y if [ -z "$y"] #判斷變數y是否為空,以確定變數num中是否為數字 then sum $num #呼叫sum函式,並把變數num的值作為第一個引數傳遞給sum函式 else echo "Error!! Please input a number!" #如果變數rmm的值不是數字,則輸出報錯資訊 fi

函式的位置引數變數:$0 代表函式名,$1 代表函式的第 1 引數,$2 代表函式的第 2 個引數,以此類推。

while迴圈

while 迴圈和 unti 迴圈都是條件迴圈,主要是指迴圈可以一直進行,直到使用者設定的條件達成為止。
while [條件判斷式]
do
程式
done
示例:從 1 加到 100。
#!/bin/bash
#從1加到100
i=1
s=0
#給變數i和s賦值
while [$i -le 100]
#如果變數的值小於等於100,則執行迴圈
do
s=$(($s+$i))
i=$(($i+1))
done
echo "The sum is: $s"

對於 while 迴圈來講,只要條件判斷式成立,迴圈就會執行。所以,只要i的值小於等於 100,迴圈就會繼續。每次迴圈給變數 s 加入變數 i 的值,再給變數加 1,直到變數 i 的值大於 100,迴圈才會停止。然後輸出變數 s 的值,也就是從 1 加到 100 的和。

until迴圈

 unti 迴圈,和 while 迴圈相反,只要條件判斷式不成立,則進行迴圈,並執行迴圈程式;一旦條件判斷式成立,則中止迴圈。語法如下:
until [條件判斷式]
do
程式
done
示例:從1加到100。
[[email protected] ~]#vi sh/until.sh
#!/bin/bash
#從1加到100
i=1
s=0
#給變數i和s賦值
until [$i-gt 100]
#迴圈,直到變數i的值大於100,就停止迴圈
do
s=$(($s+$i))
i=$(($i+1))
done
echo "The sum is: $s"

對於 until 迴圈來講,只要條件判斷式不成立,迴圈就會繼續;一旦條件判斷式成立,迴圈就會停止。所以我們判斷變數i的值是否大於 100,一旦變數的值大於 100,迴圈就會停止。