Shell脚本中循环语句for,while,until用法

循环语句:

BashShell中主要提供了三种循环方式:forwhileuntil

一、for循环

  for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在dodone 之间),直到所有元素取尽为止。

  其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。

for的语法结构如下:

 

1.for 变量 in 串行

2.do

3.执行命令

4.done

说明:

 1,讲串行中的字段迭代放入变量中

 2-4,接着将重复执行dodone之间的命令区域,直到串行中每一个字段军处理过为止。

流程图:

说明: http://www.it165.net/uploadfile/2013/0720/20130720090033473.png

用例1

 for循环在家目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的目录

 

01.#!/bin/bash

02.for in $( seq 1 10 )

03.do

04.mkdir /home/kuangl/aaa${k}

05.cd /home/kuangl/aaa${k}

06.for in $( seq 1 10 )

07.do

08.mkdir bbb${l}

09.cd /home/kuangl/aaa${k}

10.done

11.cd ..

12.done

说明:

 2seq 用于产生从某个数到另外一个数之间的所有整数。

 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 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命令

流程图

说明: http://www.it165.net/uploadfile/2013/0720/20130720090034722.png

用例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,声明isum为整数型

 4,如果条件测试:只要i值小于或者等于10,就执行循环。

 6sum+=isum=sum+i是一样的,sum累加上i

 7i的值递增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命令。

流程图:

说明: http://www.it165.net/uploadfile/2013/0720/20130720090035720.png

用例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,声明isum为整数型

 4,如果条件测试:只要i值未超过10,就进入循环。

 6sum+=isum=sum+i是一样的,sum累加上i

 7i的值递增1,此行是改变条件测试的命令,一旦i大于10,可终止循环。

 8,遇到done,回到行6去执行条件测试

 9,显示sum的值为10

测试结果:

 

1.[root@test01scripts]# ./until_test01.sh

2.10

 


你可能感兴趣的:(shell)