循环语句:
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
&
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
-i i=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
-i i=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
转载于:https://blog.51cto.com/520tom/1629960