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循環創建文件夾

測試結果:

[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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章