• C语言风格的 for 循环(SHELL的循环写法 已验证20200517)


    C语言风格的 for 循环

    C语言风格的 for 循环的用法如下:

    for((exp1; exp2; exp3))
    do
        statements
    done

    几点说明:

    • exp1、exp2、exp3 是三个表达式,其中 exp2 是判断条件,for 循环根据 exp2 的结果来决定是否继续下一次循环;
    • statements 是循环体语句,可以有一条,也可以有多条;
    • do 和 done 是 Shell 中的关键字。


    它的运行过程为:
    1) 先执行 exp1。

    2) 再执行 exp2,如果它的判断结果是成立的,则执行循环体中的语句,否则结束整个 for 循环。

    3) 执行完循环体后再执行 exp3。

    4) 重复执行步骤 2) 和 3),直到 exp2 的判断结果不成立,就结束循环。

    上面的步骤中,2) 和 3) 合并在一起算作一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。

    exp1 仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。exp2 一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。exp3 很多情况下是一个带有自增或自减运算的表达式,以使循环条件逐渐变得“不成立”。

    for 循环的执行过程可用下图表示:

    Shell for循环执行流程


    下面我们给出一个实际的例子,计算从 1 加到 100 的和。

    1. #!/bin/bash
    2. sum=0
    3. for ((i=1; i<=100; i++))
    4. do
    5. ((sum += i))
    6. done
    7. echo "The sum is: $sum"

    运行结果:
    The sum is: 5050

    代码分析:
    1) 执行到 for 语句时,先给变量 i 赋值为 1,然后判断 i<=100 是否成立;因为此时 i=1,所以 i<=100 成立。接下来会执行循环体中的语句,等循环体执行结束后(sum 的值为1),再计算 i++。

    2) 第二次循环时,i 的值为2,i<=100 成立,继续执行循环体。循环体执行结束后(sum的值为3),再计算 i++。

    3) 重复执行步骤 2),直到第 101 次循环,此时 i 的值为 101,i<=100 不再成立,所以结束循环。

    由此我们可以总结出 for 循环的一般形式为:

    for(( 初始化语句; 判断条件; 自增或自减 ))
    do
        statements
    done

    for 循环中的三个表达式

    for 循环中的 exp1(初始化语句)、exp2(判断条件)和 exp3(自增或自减)都是可选项,都可以省略(但分号;必须保留)。

    1) 修改“从 1 加到 100 的和”的代码,省略 exp1:

    1. #!/bin/bash
    2. sum=0
    3. i=1
    4. for ((; i<=100; i++))
    5. do
    6. ((sum += i))
    7. done
    8. echo "The sum is: $sum"

    可以看到,将i=1移到了 for 循环的外面。

    2) 省略 exp2,就没有了判断条件,如果不作其他处理就会成为死循环,我们可以在循环体内部使用 break 关键字强制结束循环:

    1. #!/bin/bash
    2. sum=0
    3. for ((i=1; ; i++))
    4. do
    5. if(( i>100 )); then
    6. break
    7. fi
    8. ((sum += i))
    9. done
    10. echo "The sum is: $sum"

    break 是 Shell 中的关键字,专门用来结束循环,后续章节还会深入讲解。

    3) 省略了 exp3,就不会修改 exp2 中的变量,这时可在循环体中加入修改变量的语句。例如:

    1. #!/bin/bash
    2. sum=0
    3. for ((i=1; i<=100; ))
    4. do
    5. ((sum += i))
    6. ((i++))
    7. done
    8. echo "The sum is: $sum"


    4) 最后给大家看一个更加极端的例子,同时省略三个表达式:

    1. #!/bin/bash
    2. sum=0
    3. i=0
    4. for (( ; ; ))
    5. do
    6. if(( i>100 )); then
    7. break
    8. fi
    9. ((sum += i))
    10. ((i++))
    11. done
    12. echo "The sum is: $sum"

    这种写法并没有什么实际意义,仅仅是为了给大家做演示。

    ]# cat a.sh
    #!/bin/bash
    i=1
    for ((; i<=10; i++))
    do
    echo "h">>a
    done
    echo "The i is: $i"

    举例

    #!/bin/bash
    i=0
    for i in {Z..A}
    do
    echo $i
    done

    [root@localhost bash20200508]# ./az.sh

    Z
    Y
    X
    W
    V
    U
    T
    S
    R
    Q
    P
    O
    N
    M
    L
    K
    J
    I
    H
    G
    F
    E
    D
    C
    B
    A

  • 相关阅读:
    Java的基本数据类型
    第五小组链表讨论作业
    WLST 命令和变量
    Linux之find命令详解
    Linux之netstat命令详解
    Linux之 sort,uniq,cut,wc命令详解
    Linux之grep命令详解
    Linux之awk命令详解
    Linux之sed命令详解
    关于表 datatable的条件查询
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/12906473.html
Copyright © 2020-2023  润新知