循環語句:
Bash Shell中主要提供了三種循環方式:for、while和until。
一、for循環
for循環的運作方式,是講串行的元素意義取出,依序放入指定的變量中,然后重復執行含括的命令區域(在do和done 之間),直到所有元素取盡為止。
其中,串行是一些字符串的組合,彼此用$IFS所定義的分隔符(如空格符)隔開,這些字符串稱為字段。
for的語法結構如下:
for 變量 in 串行 do 執行命令 done
說明:
行1,講串行中的字段迭代放入變量中
行2-4,接着將重復執行do和done之間的命令區域,直到串行中每一個字段軍處理過為止。
流程圖

例1:
用for循環在家目錄下創建aaa1-aaa10,然后在aaa1-aaa10創建bbb1-bbb10的目錄
#!/bin/bash for a in {1..10} do mkdir /datas/aaa$a cd /datas/aaa$a for b in {1..10} do mkdir bbb$b done done
1 #!/bin/bash 2 for k in $( seq 1 10 ) 3 do 4 mkdir /home/kuangl/aaa${k} 5 cd /home/kuangl/aaa${k} 6 for l in $( seq 1 10 ) 7 do 8 mkdir bbb${l} 9 cd /home/kuangl/aaa${k} 10 done 11 cd .. 12 done
說明:
行2,seq 用於產生從某個數到另外一個數之間的所有整數。
行4,在家目錄下創建文件夾。
行6,在使用一個for循環創建文件夾
例2
列出var目錄下各子目錄占用磁盤空間的大小。
1 #!/bin/bash 2 DIR="/var" 3 cd $DIR 4 for k in $(ls $DIR) 5 do 6 [ -d $k ] && du -sh $k 7 done
說明:
行4,對/var目錄中每一個文件,進行for循環處理。
行6,如果/var下的文件是目錄,則使用du -sh計算該目錄占用磁盤空間的大小。
二、while循環
while循環的語法:
1 while 條件測試 2 do 3 執行命令 4 done
說明:
行1,首先進行條件測試,如果傳回值為0(條件測試為真),則進入循環,執行命令區域,否則
不進入循環,介紹while 命令
行3,執行命令區域,這些命令中,應該要有改變條件測試的命令,這樣,才有機會在
有限步驟后結束執行while循環(除非想要執行無窮循環)。
行4,回到行1,執行while命令
流程圖:

例1
while循環,經典的用法是搭配轉向輸入,讀取文件的內容,做法如下:
#!/bin/bash while read a do echo $a done < /datas/6files
1 #!/bin/bash 2 while read kuangl 3 do 4 echo ${kuangl} 5 done < /home/kuangl/scripts/testfile
說明:
行2,使用read有標准輸入讀取數據,放入變量kuangl中,如果讀到的數據非空,就進入循環。
行4,把改行數據顯示出來
行5,將/home/kuangl/scripts/testfile的內容轉向輸入將給read讀取。
例2
1 #!/bin/bash 2 declare -i i=1 3 declare -i sum=0 4 while ((i<=10)) 5 do 6 let sum+=i 7 let i++ 8 done 9 echo $sum
1 #!/bin/bash 2 declare -i i=1 3 declare -i sum=0 4 while ((i<=10)) 5 do 6 let sum+=i 7 let ++i 8 done 9 echo $sum
說明:
行2-3,聲明i和sum為整數型
行4,如果條件測試:只要i值小於或者等於10,就執行循環。
行6,sum+=i和sum=sum+i是一樣的,sum累加上i。
行7,i的值遞增1,此行是改變條件測試的命令,一旦i大於10,可終止循環。
行8,遇到done,回到行6去執行條件測試
行9,顯示sum的值為55
例3 while99乘法表
1 #!/bin/bash 2 a=1 3 b=1 4 while ((a <=9)) 5 do 6 while ((b<=a)) 7 do 8 let "c=a*b" #聲明變量c 9 echo -n "$a*$b=$c " 10 let b++ 11 done 12 let a++ 13 let b=1 #因為每個乘法表都是1開始乘,所以b要重置 14 echo "" #顯示到屏幕換行 15 done
說明:
行8,聲明變量c
行9,echo輸出顯示的格式,-n不換行輸出
行13,let b=1因為每個乘法表都是1開始乘,所以b要重置
三、until循環
while循環的條件測試是測真值,until循環則是測假值。
until循環的語法:
1 until 條件測試 2 do 3 執行命令 4 done
說明:
行1,如果條件測試結果為假(傳回值不為0),就進入循環。
行3,執行命令區域。這些命令中,應該有改變條件測試的命令,這樣子,才有機會在有限步驟后結束執行until 循環(除非你想要執行無窮循環)。
行4,回到行1,執行until命令。
流程圖:

例1
1 #!/bin/bash 2 declare -i i=10 3 declare -i sum=0 4 until ((i>10)) 5 do 6 let sum+=i 7 let ++i 8 done 9 echo $sum
說明:
行2-3,聲明i和sum為整數型
行4,如果條件測試:只要i值未超過10,就進入循環。
行6,sum+=i和sum=sum+i是一樣的,sum累加上i。
行7,i的值遞增1,此行是改變條件測試的命令,一旦i大於10,可終止循環。
行8,遇到done,回到行6去執行條件測試
行9,顯示sum的值為10
例2 until99乘法表
1 #!/bin/bash 2 a=1 3 b=1 4 until ((a>9)) #until 和while相反,條件假的執行,條件真就done結束 5 do 6 until ((b>a)) 7 do 8 let "c=a*b" 9 echo -n "$a*$b=$c " 10 let b++ 11 done 12 let a++ 13 let b=1 14 echo "" 15 done
說明:
行4,如果條件測試:只要a值未超過9,就進入循環,一旦超過9就不執行,until和while條件相反,條件真就done結束
行6,b>a,一旦b大於a就不執行了
