• Shell while循环详解


    while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环。

    Shell while 循环的用法如下:

    while condition
    do
        statements
    done

    condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),dodone都是 Shell 中的关键字。

    while 循环的执行流程为:

    • 先对 condition 进行判断,如果该条件成立,就进入循环,执行 while 循环体中的语句,也就是 do 和 done 之间的语句。这样就完成了一次循环。
    • 每一次执行到 done 的时候都会重新判断 condition 是否成立,如果成立,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不成立,就结束整个 while 循环,执行 done 后面的其它 Shell 代码。
    • 如果一开始 condition 就不成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。


    注意,在 while 循环体中必须有相应的语句使得 condition 越来越趋近于“不成立”,只有这样才能最终退出循环,否则 while 就成了死循环,会一直执行下去,永无休止。

    while 语句和 if else 语句中的 condition 用法都是一样的,你可以使用 test 或 [] 命令,也可以使用 (()) 或 [[]],遗忘的读者请猛击下面的链接回顾:

    while 循环举例

    【实例1】计算从 1 加到 100 的和。

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

    运行结果:
    The sum is: 5050

    在 while 循环中,只要判断条件成立,循环就会执行。对于这段代码,只要变量 i 的值小于等于 100,循环就会继续。每次循环给变量 sum 加上变量 i 的值,然后再给变量 i 加 1,直到变量 i 的值大于 100,循环才会停止。

    i++语句使得 i 的值逐步增大,让判断条件越来越趋近于“不成立”,最终退出循环。

    对上面的例子进行改进,计算从 m 加到 n 的值。

    1. #!/bin/bash
    2. read m
    3. read n
    4. sum=0
    5. while ((m <= n))
    6. do
    7. ((sum += m))
    8. ((m++))
    9. done
    10. echo "The sum is: $sum"

    运行结果:
    1↙
    100↙
    The sum is: 5050

    【实例2】实现一个简单的加法计算器,用户每行输入一个数字,计算所有数字的和。

    1. #!/bin/bash
    2. sum=0
    3. echo "请输入您要计算的数字,按 Ctrl+D 组合键结束读取"
    4. while read n
    5. do
    6. ((sum += n))
    7. done
    8. echo "The sum is: $sum"

    运行结果:
    12↙
    33↙
    454↙
    6767↙
    1↙
    2↙
    The sum is: 7269

    在终端中读取数据,可以等价为在文件中读取数据,按下 Ctrl+D 组合键表示读取到文件流的末尾,此时 read 就会读取失败,得到一个非 0 值的退出状态,从而导致判断条件不成立,结束循环。

  • 相关阅读:
    上机小笔记
    机器人搬重物(BFS)
    排序汇总
    棋盘(BFS)
    权限控制:分配权限1
    asp.net identity 基础概念篇-理解什么是声明
    EntityFramework中几种更改数据的方式
    CodeFirst迁移时出现的中文乱码问题
    javascript Function()
    C#操作数据库(二)【操作SQL Server数据库的常用的类介绍】
  • 原文地址:https://www.cnblogs.com/qiangyuzhou/p/10806851.html
Copyright © 2020-2023  润新知