Shell脚本中循环语句for,while,until用法
循環語句:
BashShell中主要提供了三種循環方式:for、while和until。
一、for循環
??for循環的運作方式,是講串行的元素意義取出,依序放入指定的變量中,然后重復執行含括的命令區域(在do和done 之間),直到所有元素取盡為止。
? 其中,串行是一些字符串的組合,彼此用$IFS所定義的分隔符(如空格符)隔開,這些字符串稱為字段。
for的語法結構如下:
?
1.for?變量?in?串行
2.do
3.執行命令
4.done
說明:
?行1,講串行中的字段迭代放入變量中
?行2-4,接著將重復執行do和done之間的命令區域,直到串行中每一個字段軍處理過為止。
流程圖:
用例1
?用for循環在家目錄下創建aaa1-aaa10,然后在aaa1-aaa10創建bbb1-bbb10的目錄
?
01.#!/bin/bash
02.for?k?in?$(?seq?1 10 )
03.do
04.mkdir?/home/kuangl/aaa${k}
05.cd?/home/kuangl/aaa${k}
06.for?l?in?$(?seq?1 10 )
07.do
08.mkdir?bbb${l}
09.cd?/home/kuangl/aaa${k}
10.done
11.cd?..
12.done
說明:
?行2,seq 用于產生從某個數到另外一個數之間的所有整數。
?行4,在家目錄下創建文件夾。
?行6,在使用一個for循環創建文件夾
測試結果:
01.[root@test01kuangl]# ll
02.total 80
03.drwxr-xr-x 12root?? root?? 4096 Jul 20 01:23 aaa1
04.drwxr-xr-x12 root?? root?? 4096 Jul 20 01:23 aaa10
05.drwxr-xr-x 12root?? root?? 4096 Jul 20 01:23 aaa2
06.drwxr-xr-x12 root?? root?? 4096 Jul 20 01:23 aaa3
07.drwxr-xr-x 12root?? root?? 4096 Jul 20 01:23 aaa4
08.drwxr-xr-x12 root?? root?? 4096 Jul 20 01:23 aaa5
09.drwxr-xr-x 12root?? root?? 4096 Jul 20 01:23 aaa6
10.drwxr-xr-x12 root?? root?? 4096 Jul 20 01:23 aaa7
11.drwxr-xr-x 12root?? root?? 4096 Jul 20 01:23 aaa8
12.drwxr-xr-x12 root?? root?? 4096 Jul 20 01:23 aaa9
13.[root@test01kuangl]# cd? aaa1
14.[root@test01aaa1]# ll
15.total 40
16.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb1
17.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb10
18.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb2
19.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb3
20.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb4
21.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb5
22.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb6
23.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb7
24.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb8
25.drwxr-xr-x 2root root 4096 Jul 20 01:23 bbb9
用例2
?列出var目錄下各子目錄占用磁盤空間的大小。
?
1.#!/bin/bash
2.DIR="/var"
3.cd?$DIR
4.for?k?in?$(ls?$DIR)
5.do
6.[ -d $k ]&&?du?-sh $k
7.done
說明:
?行4,對/var目錄中每一個文件,進行for循環處理。
?行6,如果/var下的文件是目錄,則使用du -sh計算該目錄占用磁盤空間的大小。
測試結果:
?
01.[root@test01scripts]# ./var.sh
02.276M???cache
03.4.0K???cvs
04.84K db
05.8.0K???empty
06.4.0K????ftp
07.4.0K???games
08.4.0K???gdm
09.21G lib
10.4.0K????local
11.16K lock
12.7.4G???log
13.4.0K???logs
14.0??mail
15.4.0K???nis
16.4.0K???opt
17.4.0K???preserve
18.336K???run
19.3.7G???spool
20.212K???tmp
21.4.1G???www
22.4.0K???yp
二、while循環
while循環的語法:
?
1.while?條件測試
2.do
3.執行命令
4.done
說明:
?行1,首先進行條件測試,如果傳回值為0(條件測試為真),則進入循環,執行命令區域,否則
不進入循環,介紹while 命令
?行3,執行命令區域,這些命令中,應該要有改變條件測試的命令,這樣,才有機會在
有限步驟后結束執行while循環(除非想要執行無窮循環)。
?行4,回到行1,執行while命令
流程圖:
用例1
?while循環,經典的用法是搭配轉向輸入,讀取文件的內容,做法如下:
?
1.#!/bin/bash
2.while?read?kuangl
3.do
4.echo?${kuangl}
5.done?</home/kuangl/scripts/testfile
說明:
?行2,使用read有標準輸入讀取數據,放入變量kuangl中,如果讀到的數據非空,就進入循環。
?行4,把改行數據顯示出來
?行5,將/home/kuangl/scripts/testfile的內容轉向輸入將給read讀取。
測試結果:
?
1.[root@test01scripts]# ./while_test01.sh
2.aaaaaaa
3.bbbbbbb
用例2:
?
01.#!/bin/bash
02.declare?-i i=1
03.declare?-i?sum=0
04.while?((i<=10))
05.do
06.let?sum+=i
07.let?++i
08.done
09.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
測試結果:
1.[root@test01scripts]# ./while_02.sh
2.55
三、until循環
while循環的條件測試是測真值,until循環則是測假值。
until循環的語法:
?
1.until?條件測試
2.do
3.執行命令
4.done
說明:
?行1,如果條件測試結果為假(傳回值不為0),就進入循環。
?行3,執行命令區域。這些命令中,應該有改變條件測試的命令,這樣子,才有機會在有限步驟后結束執行until循環(除非你想要執行無窮循環)。
?行4,回到行1,執行until命令。
流程圖:
用例1:
?
01.#!/bin/bash
02.declare?-i i=10
03.declare?-i?sum=0
04.until?((i>10))
05.do
06.let?sum+=i
07.let?++i
08.done
09.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
測試結果:
?
1.[root@test01scripts]# ./until_test01.sh
2.10
?
轉載于:https://blog.51cto.com/520tom/1629960
總結
以上是生活随笔為你收集整理的Shell脚本中循环语句for,while,until用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html 判断当前窗口是否是子窗口,C#
- 下一篇: 计算机问题在线解答,2014年计算机专业