• shell中的循环结构


    2021-06-09

    关键字:


    1、for循环

    shell中的for循环有三种类型:

    1、带列表的;

    2、不带列表的;

    3、C语言风格的;

    不管哪种类型的for循环,其功能都是根据循环条件重复执行循环体中的语句。

    带列表的for循环

    列表是指一个已知的有限数量的整数或字符串型数组。

    此循环的语法如下所示:

    for var in {list}
    do
        statement1
        statement2
        statementn
    done

    循环开始后,list列表中的数据会按从左至右的顺序依次赋给 var 变量,直至所有元素走完则循环停止。

    如果列表内容是整数,则必须在数组两侧加上大括号。而如果列表内容为字符串,则可以省略两侧的大括号。

    列表字段除了明确指定内容外还可以使用“通配符”表示。通配符为一个星号 '*' ,其表示当前目录下的所有文件名称,与命令 'ls *' 等价。

    几种常见的带列表的for循环写法如下所示:

    for var in  1 2 3 4 5
    do
    
    done
    
    #现场创造一个 1 ~ 8 的连续整数数组出来。
    for var in {1...8}
    do
    
    done
    
    #创建一个1~10的整数数组,但是前进步长为3。
    #实际上只有1 4 7 10会被赋给var变量
    for var in {1..10..3}
    do
    
    done
    
    #与第一个例子等效
    for var in a b c d e
    do
    
    done
    
    #与上一个例子等效
    for var in $(ls)
    do
    
    done

    不带列表的for循环

    事实上,不存在可以不带列表数据的for循环,这里所说的不带列表其实只是隐藏了列表而已。

    若在编写for循环时不明确指明列表数据,则shell默认会使用参数列表作为数据列表源。

    #!/bin/bash
    
    for var
    do
        echo "var:$var"
    done

    将此源码储存为sh文件,并以以下命令运行:

    ./loop_test.sh p1 p2 p3

    则可以看到如下结果:

    var:p1
    var:p2
    var:p3

    C语言风格的for循环 

     这个纯粹是为了照顾C/C++程序员而设计的写法。其语法格式如下:

    for (( 表达式1; 表达式2; 表达式3 ))
    do
        语句1
        语句n
    done

    括号内的三个表达式与C语言中的一致,就不再赘述了。具体的实例如下:

    #!/bin/bash
    
    for (( i=1; i<5; i++ ))
    do
        echo "i=$i"
    done

    运行结果如下:

    i=1
    i=2
    i=3
    i=4

    使用for循环处理数组的示例代码如下所示:

    #!/bin/bash
    
    array=(mon tue wed thu fri sat sun)
    
    for var in ${array[*]}
    do
     echo $day
    done

    2、while循环

    while循环的语法结构如下所示:

    #!/bin/bash
    
    while 表达式
    do
        语句1
        语句2
        语句n
    done

    当表达式的值为真(即返回值为0时)时执行循环体中的代码。

    以下为一个示例程序:

    #!/bin/bash
    
    i=1
    while test $i -lt 10
    do
        echo "i=$i"
        let i++
    done
    
    echo
    echo
    
    j=9
    while [ $j -gt 4 ]
    do
        echo "j=$j"
        let j--
    done

    执行结果如下所示:

    i=1
    i=2
    i=3
    i=4
    i=5
    i=6
    i=7
    i=8
    i=9
    
    
    j=9
    j=8
    j=7
    j=6
    j=5

    3、until循环

    until循环可以简单理解成就是 while 循环的“非”态。其语法格式如下所示:

    #!/bin/bash
    
    until 表达式
    do
        语句1
        语句2
        语句n
    done

    当表达式的值为假(即返回值为非0时)时执行循环体中的语句。

    因其与while是“相对”的关系,因此就不再举例了。

    4、循环跳出语句

    与传统编程语言类似,shell也提供了 break 和 continue 两个语句用于强行从循环中跳出。

    这两个语句的基本用法与含义与其它编程语言一致,就不再解释及举例了。

    但是shell中的break和continue又有一点与其它语言不同:它们都允许在语句后加一个数字以表示需要跳出多少层循环(主要用于有循环嵌套的场景)。

    当 break 语句后加一个数字时,表示直接跳出指定数字层数的循环,若数字值大于实际嵌套层数,则跳到最外层即停止。

    当 continue 语句后加一个数字时,表示直接跳出指定数字层数的循环去执行下一周期的循环体代码。若数字值大于实际嵌套层数,则跳到最外层即停止。

    以下给出示例代码:

    #!/bin/bash
    
    for (( i=1; i<4; i++ ))
    do
        for (( j=9; j>6; j-- ))
        do
            echo "i*j=$((i*j))"
            if [ $j -lt 9 ]
            then
                continue 20
            fi
        done
        echo
        if test $i -gt 2
        then
            break
        fi
    done

    +++
  • 相关阅读:
    思考--连续的还是跳跃的?(二)
    方法学导论--by 有只茄子
    时空、维度,以及其他(一)
    处理问题的方法--抽象和特例化
    tomcat server 152主机.xml
    java怎么重写覆盖Spring Bean的几种方式
    maven上传jar到私服
    sql_mode=only_full_group_by
    spring何时创建bean
    mysql 快速备份数据库
  • 原文地址:https://www.cnblogs.com/chorm590/p/14869020.html
Copyright © 2020-2023  润新知