您的位置:首页 > 运维架构 > Shell

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

2015-04-08 11:59 1021 查看
循环语句: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
110)
03.
do
04.
mkdir
/home/kuangl/aaa${k}
05.
cd
/home/kuangl/aaa${k}
06.
for
l
in
$(
seq
110)
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.
total80
03.
drwxr-xr-x12rootroot4096Jul2001:23aaa1
04.
drwxr-xr-x12rootroot4096Jul2001:23aaa10
05.
drwxr-xr-x12rootroot4096Jul2001:23aaa2
06.
drwxr-xr-x12rootroot4096Jul2001:23aaa3
07.
drwxr-xr-x12rootroot4096Jul2001:23aaa4
08.
drwxr-xr-x12rootroot4096Jul2001:23aaa5
09.
drwxr-xr-x12rootroot4096Jul2001:23aaa6
10.
drwxr-xr-x12rootroot4096Jul2001:23aaa7
11.
drwxr-xr-x12rootroot4096Jul2001:23aaa8
12.
drwxr-xr-x12rootroot4096Jul2001:23aaa9
13.
[root@test01kuangl]
#cdaaa1
14.
[root@test01aaa1]
#ll
15.
total40
16.
drwxr-xr-x2rootroot4096Jul2001:23bbb1
17.
drwxr-xr-x2rootroot4096Jul2001:23bbb10
18.
drwxr-xr-x2rootroot4096Jul2001:23bbb2
19.
drwxr-xr-x2rootroot4096Jul2001:23bbb3
20.
drwxr-xr-x2rootroot4096Jul2001:23bbb4
21.
drwxr-xr-x2rootroot4096Jul2001:23bbb5
22.
drwxr-xr-x2rootroot4096Jul2001:23bbb6
23.
drwxr-xr-x2rootroot4096Jul2001:23bbb7
24.
drwxr-xr-x2rootroot4096Jul2001:23bbb8
25.
drwxr-xr-x2rootroot4096Jul2001:23bbb9
用例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.
276Mcache
03.
4.0Kcvs
04.
84Kdb
05.
8.0Kempty
06.
4.0K
ftp
07.
4.0Kgames
08.
4.0Kgdm
09.
21Glib
10.
4.0K
local
11.
16Klock
12.
7.4Glog
13.
4.0Klogs
14.
0mail
15.
4.0Knis
16.
4.0Kopt
17.
4.0Kpreserve
18.
336Krun
19.
3.7Gspool
20.
212Ktmp
21.
4.1Gwww
22.
4.0Kyp
二、while循环while循环的语法:
1.
while
条件测试
2.
do
3.
执行命令
4.
done
说明:行1,首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则不进入循环,介绍while命令行3,执行命令区域,这些命令中,应该要有改变条件测试的命令,这样,才有机会在有限步骤后结束执行while循环(除非想要执行无穷循环)。行4,回到行1,执行while命令流程图:

用例1while循环,经典的用法是搭配转向输入,读取文件的内容,做法如下:
1.
#!/bin/bash
2.
while
read
kuangl
3.
do
4.
echo
${kuangl}
5.
done
&
lt
;/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
-ii=1
03.
declare
-i
sum
=0
04.
while
((i&
lt
;=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
-ii=10
03.
declare
-i
sum
=0
04.
until
((i&
gt
;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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: