zoukankan      html  css  js  c++  java
  • Shell脚本中循环语句for,while,until用法

    循环语句:

    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 $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
    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  "$a*$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 "$a*$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就不执行了

  • 相关阅读:
    ADO.NET存取数据库数据
    2017-01-03
    re模块
    random模块(随机)
    sys模块
    os模块
    datetime模块
    time模块
    logging模块
    Python函数初识
  • 原文地址:https://www.cnblogs.com/yinfutao/p/9964070.html
Copyright © 2011-2022 走看看