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

180 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

本文已参与「新人创作礼」活动,一起开启掘金创作之路

本文已参与「新人创作礼」活动,一起开启掘金创作之路

本文已参与「新人创作礼」活动,一起开启掘金创作之路

本文已参与「新人创作礼」活动,一起开启掘金创作之路

循环语句:

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 a in {1..10}

do

    mkdir /datas/aaa$a

    cd /datas/aaa$a

    for b in {1..10}

    do

        mkdir bbb$b

    done

done

1 #!/bin/bash

2 for k in $( seq 1 10 )

3     do 4 mkdir /home/kuangl/aaa${k}

5     cd /home/kuangl/aaa${k}

6     for l in $( seq 1 10 )

7     do

8         mkdir bbb${l}

9         cd /home/kuangl/aaa${k}

10    done

11    cd ..

12 done

说明:

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

 行4,在家目录下创建文件夹。

 行6,在使用一个for循环创建文件夹

例2

 列出var目录下各子目录占用磁盘空间的大小。

1 #!/bin/bash

2 DIR="/var"3 cd $DIR

4 for k in (ls(ls DIR)

5 do

6     [ -d k ] && du -sh k

7 done

说明:

 行4,对/var目录中每一个文件,进行for循环处理。

 行6,如果/var下的文件是目录,则使用du -sh计算该目录占用磁盘空间的大小。

二、while循环

while循环的语法:

1 while 条件测试

2 do

3     执行命令

4 done

说明:

 行1,首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则

不进入循环,介绍while 命令

 行3,执行命令区域,这些命令中,应该要有改变条件测试的命令,这样,才有机会在

有限步骤后结束执行while循环(除非想要执行无穷循环)。

 行4,回到行1,执行while命令

流程图:

例1

 while循环,经典的用法是搭配转向输入,读取文件的内容,做法如下:

#!/bin/bash

while read a

do

    echo $a

done < /datas/6files

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读取。

 例2

1 #!/bin/bash

2 declare -i i=1

3 declare -i sum=0

4 while ((i<=10))

5 do

6   let sum+=i

7   let i++

8 done

9 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

例3  while99乘法表

 1 #!/bin/bash

 2 a=1

 3 b=1

 4 while ((a <= 9))

 5 do 

 6     while ((b<=a))

 7     do

 8         let "c=a*b" #声明变量c

 9         echo -n "aa*b=$c "

10         let b++

11     done

12     let a++

13     let b=1 #因为每个乘法表都是1开始乘,所以b要重置

14     echo "" #显示到屏幕换行

15 done

说明:

行8,声明变量c

行9,echo输出显示的格式,-n不换行输出

行13,let b=1因为每个乘法表都是1开始乘,所以b要重置

三、until循环

while循环的条件测试是测真值,until循环则是测假值。

until循环的语法:

1 until 条件测试

2 do

3     执行命令

4 done

说明:

 行1,如果条件测试结果为假(传回值不为0),就进入循环。

 行3,执行命令区域。这些命令中,应该有改变条件测试的命令,这样子,才有机会在有限步骤后结束执行until 循环(除非你想要执行无穷循环)。

 行4,回到行1,执行until命令。

 流程图:

 例1

1 #!/bin/bash

2 declare -i i=10

3 declare -i sum=0

4 until ((i>10))

5 do

6     let sum+=i

7     let ++i

8 done

9 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

例2    until99乘法表

 1 #!/bin/bash

 2 a=1 

 3 b=1 

 4 until ((a>9)) #until 和while相反,条件假的执行,条件真就done结束

 5 do 

 6     until ((b>a))

 7     do

 8         let "c=a*b"

 9         echo -n "aa*b=$c "

10         let b++

11     done

12     let a++

13     let b=1

14     echo ""

15 done

说明:

行4,如果条件测试:只要a值未超过9,就进入循环,一旦超过9就不执行,until和while条件相反,条件真就done结束

行6,b>a,一旦b大于a就不执行了

\