循環語句:bash
Bash Shell中主要提供了三種循環方式:for、while和until。ide
1、for循環測試
for循環的運做方式,是講串行的元素意義取出,依序放入指定的變量中,而後重複執行含括的命令區域(在do和done 之間),直到全部元素取盡爲止。spa
其中,串行是一些字符串的組合,彼此用$IFS所定義的分隔符(如空格符)隔開,這些字符串稱爲字段。blog
for的語法結構以下:ip
for 變量 in 串行 do 執行命令 done
說明:
字符串
行1,講串行中的字段迭代放入變量中get
行2-4,接着將重複執行do和done之間的命令區域,直到串行中每個字段軍處理過爲止。it
流程圖:for循環
用例1
用for循環在家目錄下建立aaa1-aaa10,而後在aaa1-aaa10建立bbb1-bbb10的目錄
#!/bin/bash for k in $( seq 1 10 ) do mkdir /home/kuangl/aaa${k} cd /home/kuangl/aaa${k} for l in $( seq 1 10 ) do mkdir bbb${l} cd /home/kuangl/aaa${k} done cd .. done
說明:
行2,seq 用於產生從某個數到另一個數之間的全部整數。
行4,在家目錄下建立文件夾。
行6,在使用一個for循環建立文件夾
測試結果:
[root@test01 kuangl]# ll total 80 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa1 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa10 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa2 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa3 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa4 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa5 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa6 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa7 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa8 drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa9 [root@test01 kuangl]# cd aaa1 [root@test01 aaa1]# ll total 40 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb1 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb10 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb2 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb3 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb4 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb5 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb6 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb7 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb8 drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb9
用例2
列出var目錄下各子目錄佔用磁盤空間的大小。
#!/bin/bash DIR="/var" cd $DIR for k in $(ls $DIR) do [ -d $k ] && du -sh $k done
說明:
行4,對/var目錄中每個文件,進行for循環處理。
行6,若是/var下的文件是目錄,則使用du -sh計算該目錄佔用磁盤空間的大小。
測試結果:
[root@test01 scripts]# ./var.sh 276M cache 4.0K cvs 84K db 8.0K empty 4.0K ftp 4.0K games 4.0K gdm 21G lib 4.0K local 16K lock 7.4G log 4.0K logs 0 mail 4.0K nis 4.0K opt 4.0K preserve 336K run 3.7G spool 212K tmp 4.1G www 4.0K yp
2、while循環
while循環的語法:
while 條件測試 do 執行命令 done
說明:
行1,首先進行條件測試,若是傳回值爲0(條件測試爲真),則進入循環,執行命令區域,不然
不進入循環,介紹while 命令
行3,執行命令區域,這些命令中,應該要有改變條件測試的命令,這樣,纔有機會在
有限步驟後結束執行while循環(除非想要執行無窮循環)。
行4,回到行1,執行while命令
流程圖:
用例1
while循環,經典的用法是搭配轉向輸入,讀取文件的內容,作法以下:
#!/bin/bash while read kuangl do echo ${kuangl} done < /home/kuangl/scripts/testfile
說明:
行2,使用read有標準輸入讀取數據,放入變量kuangl中,若是讀到的數據非空,就進入循環。
行4,把改行數據顯示出來
行5,將/home/kuangl/scripts/testfile的內容轉向輸入將給read讀取。
測試結果:
[root@test01 scripts]# ./while_test01.sh aaaaaaa bbbbbbb
用例2:
#!/bin/bash declare -i i=1 declare -i sum=0 while ((i<=10)) do let sum+=i let ++i done 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
測試結果:
[root@test01 scripts]# ./while_02.sh 55
3、until循環
while循環的條件測試是測真值,until循環則是測假值。
until循環的語法:
until 條件測試 do 執行命令 done
說明:
行1,若是條件測試結果爲假(傳回值不爲0),就進入循環。
行3,執行命令區域。這些命令中,應該有改變條件測試的命令,這樣子,纔有機會在有限步驟後結束執行until 循環(除非你想要執行無窮循環)。
行4,回到行1,執行until命令。
流程圖:
用例1:
#!/bin/bash declare -i i=10 declare -i sum=0 until ((i>10)) do let sum+=i let ++i done 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
測試結果:
[root@test01 scripts]# ./until_test01.sh 10