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 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迴圈建立資料夾
測試結果:
[[email protected] 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
[ [email protected] kuangl]# cd aaa1
[[email protected] 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計算該目錄佔用磁碟空間的大小。
測試結果:
[[email protected] 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讀取。
測試結果:
[[email protected] 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
測試結果:
[[email protected] 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
測試結果:
[[email protected] scripts]# ./until_test01.sh
10