在shell腳本中,循環是很重要的一環。循環可以不斷的執行某個程序段落,直到用戶設置的條件達成為止。在shell中,除了這種依據判斷時達成與否的不定循環之外,還有另外一種已經固定要跑多少次的循環,可稱之為固定循環。下面,我們主要對for,while,until三種循環做一下介紹。
一、for循環
For循環是給定變量列表的固定次數循環,其執行機制為依次將列表中的元素賦值給“變量名”,每次賦值后即執行一次循環體,直到列表中的元素耗盡,循環結束。其基本語法如下:
for 變量名 in 變量列表;do
?循環體
Done
由于是固定次數循環,而其循環次數是由變量列表所決定的,那么對于變量列表,其生成方式主要有以下幾種:
? 直接給出列表
? 整數列表
????{m..n}
????${seq m n}
? 返回列表的命令;?$(COMMAND)
? 使用glob,如:*.sh
? 變量引用:$@,$*
其中,對于整數型的變量列表,shell同樣提供了類似于C語言的for循環風格,其語法為:
for ((初始值;限制值;執行步長));do
?程序段
done
?這種語法適合于數值方式的運算當中,在for后面的括號內的三串內容意義為:
? 初始值:某個變量在循環當中的初始值,直接以類似i=1設置;
? 限制值:當變量的值在這個限制值的范圍內,就繼續進行循環,例如i<=100;
? 執行步長:每做一次循環時變量的變化量,如:i=i+1;
對于此種語法,其執行順序為:初始值à限制值à程序段à執行步長à限制值。如此就形成了一個循環,直至變量超過限制值時結束循環。
下面我們利用for循環的兩種語法分別打印九九乘法表。
首先我們用標準型for循環語法來編寫腳本。
#!/bin/bash for i in {1..9};do for j in $(seq $i);do num=$[j*i] echo -ne "$i*$i=$num\t" done echo done
然后我們用C語言風格的for循環語法來編寫腳本。
#!/bin/bash for ((i=1;i<=9;i++));do for ((j=1;j<=i;j++));do num=$[j*i] echo -ne "$j*$i=$num\t" done echo done
二、while循環
While循環是一種條件判斷循環,只要滿足設置的條件,就會執行相應的命令。其常用的基本語法如下。
while CONDITION; do
循環體
done
其中CONDITION為循環控制條件,進入循環之前,先做一次判斷,每一次循環之后會再次做判斷;若條件判斷為“true”,則執行一次循環;直到條件判斷為“false”,則終止循環;因此,CONDITION一般應該有循環控制變量,而此變量的值會在循環體不斷的被修正。
下面我們以while循環來打印一下九九乘法表。
#!/bin/bash i=1 #循環控制變量 while [ $i -le 9 ];do j=1 #循環控制變量 while [ $j -le $i ];do num=$[j*i] echo -ne "$j*$i=$num\t" j=$((j+1)) #循環控制變量的值在循環體內不斷被修正 done echo i=$((i+1)) #循環控制變量的值在循環體內不斷被修正 done
三、until循環
Until循環同樣是一種條件判斷循環,只要不滿足設置的條件,就會執行相應的命令,其常用語法如下。
until CONDITION; do
循環體
done
其中CONDITION為循環控制條件,進入循環之前,先做一次判斷,每一次循環之后會再次做判斷;若條件判斷為“false”,則執行一次循環;直到條件判斷為“true”,則終止循環;因此,CONDITION一般應該有循環控制變量,而此變量的值會在循環體不斷的被修正。
下面我們以until循環來打印一下九九乘法表。
#!/bin/bash i=1 #循環控制變量 until [ $i -gt 9 ];do j=1 #循環控制變量 until [ $j -gt $i ];do num=$[j*i] echo -ne "$j*$i=$num\t" j=$((j+1)) #循環控制變量的值在循環體中不斷被修正 done echo i=$((i+1)) #循環控制變量的值在循環體中不斷被修正 done
原創文章,作者:luoliumeng,如若轉載,請注明出處:http://www.www58058.com/38241