循環語句:
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 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
二、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
三、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