1. 程式人生 > 其它 >Shell指令碼中迴圈語句for,while,until用法

Shell指令碼中迴圈語句for,while,until用法

技術標籤:linuxshelllinux

迴圈語句:

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