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

作者:&思远晨曦  发布日期:2013-07-20 08:57:13

循环语句:

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

 

Tag标签: Shell脚本   Shell脚本  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规