目录
while是循环的语句,用于不断执行一系列的任务,当满足条件时进入循环,直到满足循环再跳出循环。
先看下shell的基本语法:
while 判断条件 #判断进入和退出循环的条件语句,满足该条件时进入下面的子代码中,执行完子代码后再进行while条件判断,直到不满足while的条件语句,不走子代码模块,直接结束循环。
do #语法格式
子代码模块 #子代码模块,满足while条件后,就进入到子代码模块中
done #语法格式
1、while的基本用法
比如我们想执行3次某个数字,就可以用while循环。
#!/bin/bash
i=0 #给i赋值为0
while(($i<2)) #开始进行判断 i(i=0) < 2,进入循环中
do #语法格式
let "i++" #这行代码就是让i进行累加,第一次i为0,i+1=1然后得到结果为1 再赋值给i 此时i就=1了,现在再跳出循环,去进行while的循环判断 (具体代码流转见下方)
done #语法格式
echo $i #输出i的值
执行结果截图:
首先i=0,然后发现while判断0<2,然后进入到while的子代码中,进行i++的计算,刚刚第一遍循环结束后,i的值现在为1,此时去进行while循环的判断,发现满足循环条件i(i=1)<2,然后再进入到循环中,去进行i++(就是i = i + 1)的赋值,此时得到结果为2,然后去进行while循环条件的判断,发现i(i=2) < 2,不满足了,这时候就不执行子代码了。直接打印i的值出来
输出的结果为:i=2
这里再把流程简单的描述下
第一次循环:i=0 while的判断条件为i<2,满足条件,进行子代码操作i++,此时i=1
第二次循环:i=1 while的判断条件为i<2,满足条件,进行子代码操作i++,此时i=2
第三次循环:i=2 while的判断条件为i<2,不满足条件,不进行子代码操作,循环结束,打印结果为i=2
总结下就是,只要满足while循环的条件,就回去while的子代码中进行一遍操作,最后出来的值,再去进行while的循环判断,如果还满足就继续执行,直到最后出来的值不满足while的循环
所有的循环语句必须考虑循环控制的问题,如果循环条件能一直满足,就会跳不出循环一直执行下去,程序将进入无限循环状态或发生内存溢出的问题。此时可以用ctrl+C强制结束。
如果上面能理解的话,这时候我们把echo $i写到循环里,看看最后的输出结果是什么?
#!/bin/bash
i=0 #给i赋值为0
while(($i<2)) #开始进行判断 i(i=0) < 2,进入循环中
do #语法格式
let "i++" #这行代码就是让i进行累加,第一次i为0,i+1=1然后得到结果为1 再赋值给i 此时i就=1了,现在再跳出循环,去进行while的循环判断 (具体代码流转见下方)
echo $i #输出i的值
done #语法格式
执行结果:
打印结果为:1 2
这个为啥会有两个结果呢?因为echo在while的循环条件中,每次+1后都会打印一次值出来
第一次循环:i=0 while的判断条件为i<2,满足条件,进行子代码操作i++,此时i=1,然后打印结果 1
第二次循环:i=1 while的判断条件为i<2,满足条件,进行子代码操作i++,此时i=2 然后打印结果 2
第三次循环:i=2 while的判断条件为i<2,不满足条件,不进行子代码操作,循环结束,因为已经走不到循环操作里了,所以就不会再去打印了
2、无限循环
如果想让他无限循环下去,可以让子代码模块的条件无论怎样执行完后都不会满足while条件,这样就会一直执行下去,或者可以写成以下样式:
while : #判断条件直接写成:
do #语法格式
子代码模块 #子代码模块
done #语法格式
或者
while true #while条件永远为true
do #语法格式
子代码模块 #子代码模块
done #语法格式