while expression
do
statements1
statements2
......
done
expression是测试表达式,do到done之间是循环体和for,until一样
while也称为前测试循环语句,重复次数是利用一个条件来控制是否继续重复执行这个语句。为了避免死循环,必须保证循环体中包含循环出口条件即表达式存在退出状态为非0的情况。
计数器就是一个变量,在该变量的范围内执行循环体,不在计数器范围内,就退出循环
#!/bin/bash
i=1
while [[ "$i" -lt 10 ]]
do
let "sum=i**2"
echo "$i 的平方为 $sum"
let "i+=1"
done
输出结果为:
有时,循环我们是不知道范围,只有脚踩西瓜皮走到哪里滑到哪里,什么时候停呢?自然是西瓜皮滑不动的时候咯,那么我们把"西瓜皮滑不动"这句话提前告诉shell,什么时候我说"西瓜皮滑不动了",就代表结束了。
例如:写一个简单的验证码的小脚本,只有输入0或者验证码1234才能退出程序
#!/bin/bash
echo "请输入验证码1234,判断是否是人机:"
read sum
while [[ "$sum" != 0 ]]
do
if [ -z "$sum" ];then
echo "没输入验证码,请再次输入"
read sum
elif [ "$sum" != "1234" ];then
echo "验证码错误,请再次输入"
read sum
else
echo "验证成功"
exit 0;
fi
done
输出结果:
唯一需要理解的就是,当sum的值等于0时,这个判断整体 [[ "$sum" != 0 ]]就是非0的会退出循环,也就是说我们要保证第一次或某次$sum返回while的值是0,所以我们把1234输入成功后,exit 0告诉while 执行成功,退出码为0,不符合[[ "$sum" != 0 ]],这样while检查时expression的值就不是0,就会退出循环
原文:https://www.cnblogs.com/hxlinux/p/12939975.html