• Linux与Shell学习--shell系列11--流程控制4(until循环)


            until循环和while循环整体概念是一样的,只不过while循环的循环前提是满足while判断时进入子模块中,当不满足while判断条件时跳出循环,如果while判断条件一直满足就一直进行循环;until循环的循环前提是不满足until判断时进入子模块中,当满足until判断条件时跳出循环,如果until判断条件一直不满足就一直进行循环。

    1. until 判断条件      #判断进入和退出循环的条件语句,不满足该条件时进入下面的子代码中,执行完子代码后再进行until条件判断,直到满足until的条件语句,不走子代码模块,直接结束循环。
    2. do #语法格式
    3.     子代码模块 #子代码模块,不满足until条件后,就进入到子代码模块中
    4. done

    为了容易看出区别,这里直接和while循环用一样的例子。

    1. #!/bin/bash
    2. i=0 #给i赋值为0
    3. until (($i>2)) #开始进行判断 i(i=0) > 2,进入循环中
    4. do #语法格式
    5. let "i++" #这行代码就是让i进行累加,第一次i为0,i+1=1然后得到结果为1  再赋值给i  此时i就=1了,现在再跳出循环,去进行until的循环判断 (具体代码流转见下方)
    6. done #语法格式
    7. echo $i #输出i的值

    执行结果截图: 

     

            首先i=0,然后until判断0>2不成立,然后进入到until的子代码中,进行i++的计算,刚刚第一遍循环结束后,i的值现在为1,此时去进行until循环的判断,发现i(i=1)>2不满足循环条件,然后再进入到循环中,去进行i++(就是i = i + 1)的赋值,此时得到结果为2,然后去进行until循环条件的判断,发现i(i=2) < 2仍不满足until的判断条件,这时候再进入到子代码中进行i++计算,此时i=3,然后再去进行until的判断,发现i(i=3)>2满足until的判断条件了,这时候就不执行子代码了。直接打印i的值出来,输出的结果为:i=3

    这里再把流程简单的描述下

    第一次循环:i=0 until的判断条件为i>2,不满足条件,进行子代码操作i++,此时i=1

    第二次循环:i=1 until的判断条件为i>2,不满足条件,进行子代码操作i++,此时i=2

    第三次循环:i=2 until的判断条件为i>2,不满足条件,进行子代码操作i++,此时i=3

    第四次循环:i=3 until的判断条件为i>2,满足条件了,就不进行子代码操作,循环结束,打印结果为i=3

           总结下就是,只要不满足until循环的条件,就会去until的子代码中进行一遍操作,最后出来的值,再去进行until的循环判断,如果还不满足就继续执行,直到最后出来的值满足until的循环

         所有的循环语句必须考虑循环控制的问题,如果循环条件能一直不满足,就会跳不出循环一直执行下去,程序将进入无限循环状态或发生内存溢出的问题。此时可以用ctrl+C强制结束。

    如果上面能理解的话,这时候我们把echo $i写到循环里,看看最后的输出结果是什么?

    1. #!/bin/bash
    2. i=0 #给i赋值为0
    3. until (($i>2)) #开始进行判断 不满足i(i=0) > 2时,进入循环中
    4. do #语法格式
    5. let "i++" #这行代码就是让i进行累加,第一次i为0,i+1=1然后得到结果为1  再赋值给i  此时i就=1了,现在再跳出循环,去进行until的循环判断 (具体代码流转见下方)
    6. echo $i #输出i的值
    7. done #语法格式

    执行结果截图:

     

     

    这个为啥会有两个结果呢?因为echo在until的循环条件中,每次+1后都会打印一次值出来

    第一次循环:i=0 until的判断条件为i>2,不满足条件,进行子代码操作i++,此时i=1,然后打印结果 1

    第二次循环:i=1 until的判断条件为i>2,不满足条件,进行子代码操作i++,此时i=2  然后打印结果 2

    第二次循环:i=2 until的判断条件为i>2,不满足条件,进行子代码操作i++,此时i=3  然后打印结果 2

    第三次循环:i=3 until的判断条件为i>2,满足条件,不进行子代码操作,循环结束,因为已经走不到循环操作里了,所以就不会再去打印了

    这篇结合着上篇while对比着看就能看出差异了,根据不同场合选择不同的循环方式即可。

            只看判断条件即可:

            while是满足时进入到子代码模块中,不满足时结束循环

            until是不满足时进入到子代码模块中,满足时结束循环。

  • 相关阅读:
    vue多层嵌套子路由不显示
    Ubuntu之apt-get系列--apt-get安装软件的方法/教程
    YOLO物体检测-系列教程7:YOLOV3源码解读5之 Darknet
    代码随想录算法训练营第一天|LeetCode704二分查找、LeetCode27移除元素
    基于springboot+vue的智慧幼儿园管理系统(前后端分离)
    计算机设计大赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
    图论——有向图强连通分量&无向图双连通分量
    【Java设计模式 规范与重构】 六 代码重构小结
    循环神经网络不常应用于,循环神经网络应用举例
    【企业数字化】企业数字化技术应用5大技术趋势
  • 原文地址:https://blog.csdn.net/weixin_42893232/article/details/127770444