Shell腳本中循環語句for,while,until用法


循環語句:

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就不執行了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM