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

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

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

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

#!/bin/bash

i=0               #给i赋值为0
until (($i>2))     #开始进行判断 i(i=0) > 2,进入循环中
do                #语法格式
  let "i++"       #这行代码就是让i进行累加,第一次i为0,i+1=1然后得到结果为1  再赋值给i  此时i就=1了,现在再跳出循环,去进行until的循环判断 (具体代码流转见下方)
done              #语法格式
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写到循环里,看看最后的输出结果是什么?

#!/bin/bash

i=0               #给i赋值为0
until (($i>2))    #开始进行判断 不满足i(i=0) > 2时,进入循环中
do                #语法格式
  let "i++"       #这行代码就是让i进行累加,第一次i为0,i+1=1然后得到结果为1  再赋值给i  此时i就=1了,现在再跳出循环,去进行until的循环判断 (具体代码流转见下方)
  echo $i         #输出i的值
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是不满足时进入到子代码模块中,满足时结束循环。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘阿童木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值