一,while循环的概念
重复判断条件测试操作,只要条件成立就反复执行对应的命令序列(循环体),直到条件测试不成立或为假;
使用while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后面的命令操作将无法执行。因此,循环体内的命令序列中应包括修改测试条件的语句,以便在适当的时候使测试条件不再成立,从而结束循环。
二,语法格式
while语句执行流程
注意:避免陷入死循环, 条件测试设置为while true 或while false ,循环退出根据测试条件的退出码来定,一定要设置退出条件
三,使用场景以及使用格式
(1)范例1:
[root@localhost ~]# cat while-1.sh
[root@localhost ~]# sh while-1.sh
(2)范例2,编写脚本用于批量添加用户,要求如下:
要求提供交互功能,当管理员执行该脚本时,可以根据提示指定需添加的用户数量(少于100)、用户名前缀、并能够设置这些用户账户的失效时间,初始密码。用户名编号统一使用两位数,如使用”01”、”02”、”03”的形式,而不是”1”、”2”、”3”的形式。
编写对应的批量删除用户脚本,要能够通过命令行参数指定用户名前缀,执行脚本后删除所有使用了该前缀的用户账户,但要防止删除root用户。
批量添加用户脚本:
1)批量添加用户脚本myuadd.sh内容如下:
[root@localhost ~]# vim useradd.sh
2)给脚本myuadd.sh增加x权限
3)执行脚本myuadd.sh,添加用户
4)验证结果:查看/etc/passwd文件是否添了新用户(3)批量删除用户脚本:
1)批量删除用户脚本myudel.sh内容如下:
[root@localhost ~]# vim userdel.sh
$#位置参数个数
2)给脚本myudel.sh增加x权限
3)执行脚本myudel.sh,删除用户。如myudel.sh caiwu03或myudel.sh caiwu
4)验证结果:查看/etc/passwd文件中已删除的用户是否还存在。(3)范例3:猜价格游戏
在一些娱乐节目中,经常有猜价格的游戏,要求参与者在最短时间内猜出展示商品的实际价格,当所猜的价格高于或低于实际价格,主持人给出相应提示。
案例要求如下:由脚本预先生成一个随机的价格(0-999)作为实际价格,判断用户猜测的价格是否高于或低于实际价格,给出相应提示后再次要求用户猜测,直到用户猜中实际价格为止,输出用户共猜测的次数、实际价格。
针对上述要求,主要设计思路如下:通过环境变量RANDOM可获得一个小于216 的随机数,计算其与1000的余数即可获得0~999的随机价格,反复猜测操作可以通过以true作为测试条件的while循环实现,当用户猜中实际价格时终止循环,判断猜测价格与实际价格的过程采用if语句实现,嵌套在while循环体内,使用变量来记录猜测次数。
[root@localhost ~]# vim pricegame.sh
exit命令说明:系统中是有 exit 命令的,用于退出当前用户的登录状态。但是在 Shell 脚本中,exit 语句是用来退出当前脚本的。也就是说,在 Shell 脚本中,只要碰到了 exit 语句,后续的程序就不再执行,而直接退出脚本。exit 的语法如下:
exit [返回值]
如果在 exit 之后定义了返回值,那么这个脚本执行之后的返回值就是我们自己定义的返回值。可以通过查询 $? 这个变量来査看返回值。如果 exit 之后没有定义返回值,则脚本执行之后的返回值是执行 exit 语句之前最后执行的一条命令的返回值。