shell之循环结构

一循环语句
1.1 带列表的for循环语句shell

    for variable in{list}express

    do数组

           statement1bash

    done命令行

    (list为一个列表,for循环的执行次数与list中元数个数相关,shell将in关键字后面的list列表的第一个元素值赋给变量variabel,而后执行循环体,list元素都被访问完后,程序执行done语句后面的其余语句。)字符串

    例子:it

    #! /bin/bashio

    #for循环开始for循环

    for var in 1 2 3 45 6 7 8变量

    do

       #依次输出列表中的数字

       echo "the number is $var"

    done

    结果:

    the number is 1

    the number is 2

    the number is 3

    the number is 4

    the number is 5

    the number is 6

    the number is 7

    the number is 8

    另外,shell容许指定for语句的步长,基本语法为:

    for variable in{start..end..step}

    用字符串做为元素,可省略外面的大括号,如:

    for day in mon tuewed thu

    能够用ls命令的输出结果做为for循环的执行条件。如:

    #! /bin/bash

    #使用ls命令的执行结果做为列表

    for file in $(ls)

    do

       #输出每一个文件名

       echo "$file"

    done

    ($()的做用就是讲其中的字符串做为命令执行,可用`ls`替代。)

    上面例子能够等价于

    #! /bin/bash

    #使用通配符做为列表条件,列出当前目录全部文件

    for file in *

    do

       echo "$file"

    done

     列表for循环另外一个比较重要的用途是处理脚本参数。可经过$*一次获取全部参数。用户能够经过将该系统变量获取的参数值做为for循环的条件列表。从而一次处理各个参数。

    例子

    #!/bin/bash

    #输出全部的参数

    echo"$*"

    #将参数列表做为条件

    for arg in $*

    do

       #依次输出各个参数值

       echo "${arg}"

    done

    执行:./ex5.sh a b c d

    结果:a b c d

             a

             b

             c

             d

1.2 不带列表的for循环

    for variable

    do

           statement1

    done

    (没有条件列表,shell从命令行获取条件列表)

    等价于

    for variable in $@

    do

           statement1

    done

    ($@也是获取全部参数)

    等价于

    for variable in $*

    do

           statement1

    done

    例子:
    #! /bin/bash

    #! /bin/bash

    #不带条件列表

    for arg

    do

       #输出每一个参数

       echo "$arg"

    done

     for语句处理数组

    for variable in${array[*]}

1.3 until语句

    until expression

    do

           statement1

    done

    (expression不为0执行statement1,执行完后继续判断expression,不为0,继续执行,为0则退出)

    用until批量增长用户:

    #! /bin/bash

    #定义变量i

    i=1

    #一直循环到变量i的值为21

    until ["$i" -eq 21 ]

    do

       #执行useradd命令添加用户

       useradd user$i

       #修改用户密码

       echo "password" | passwd --stdinuser$i > /dev/null

       #循环变量自增

       let "i++"

    done

    until循环删除系统用户:

    #! /bin/bash

    i=1

    until ["$i" -eq 21 ]

    do

       #依次删除用户

       userdel -r user$i

       let "i++"

    done

1.4 whlie循环语句

    while expression

    do   

           statement1

    done

    (expression 为0执行循环体(即为真执行))

    例子:

    #! /bin/bash

    #定义循环变量

    i=1

    #while循环开始

    while [["$i" -lt 10 ]]      //小于10,为真,即0,执行循环体

    do

       #计算平方

       let "square=i*i"

       #输出平方

       echo "$i*$i=$square"

       #循环变量自增

       let "i=i+1"

    done

    用户可在程序中设置一个特殊的标记值,当该标记值出现时,终止while循环。

    例子:

    #! /bin/bash

     #提示用户输入数字

    echo "Pleaseenter a number between 1 and 10.Enter 0 to exit."

    #读取用户输入的数字

    read var

    #while循环开始

    while [["$var" != 0 ]]

    do

       #提示用户输入数字过小

       if [ "$var" -lt 5 ]

       then

          echo "Too small. Try again."

          read var

       #提示用户输入数字太大

       elif [ "$var" -gt 5 ]

       then

          echo "Too big. Try again."

          read var;

        else

           echo "Congratulation! You areright."

           exit 0;

    fi

    (上面变量var是结束标记,为0或5时,退出循环)

1.5 嵌套循环:

    例子1:九九乘法表:

    #! /bin/bash

    #外层循环

    for((i=1;i<=9;i++))

    do

       #内层循环

       for ((j=1;j<=i;j++))

       do

          #计算2个数的乘积

          let "product=i*j"

          #输出乘积

          printf "$i*$j=$product"

          #输出空格分隔符

          if [[ "$product" -gt 9 ]]

          then

             printf "   "

          else

             printf "    "

          fi

       done

       echo

    done

1.6 break语句控制循环

    break当即跳出某个循环,执行循环体后面的语句。

    默认状况下,break退出一层循环,可在后面增长一个数字做为参数,指定要退出的循环参数。如:break2退出两层循环。

 1.7 continue语句控制循环

    continue跳过当前循环体中该语句后面的语句,从新从循环语句开始的位置执行。

    例子:

    #! /bin/bash

    for var in {1..10}

    do

       #若是当前数字为奇数,从新循环

       if [[ "$var%2" -eq 1 ]]

       then

          #跳事后面的语句

          continue

       fi

       echo "$var"

    done

    结果:输出10之内的偶数

     注意:continue与break的本质区别是continue没有跳出循环结构

相关文章
相关标签/搜索