while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标、有范围的使用场景。 while循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行, 为假就结束循环
编写一个用来猜测数值大小的脚本。
结合使用多分支的if条件测试语句与while条件循环语句,该脚本使用 $RANDOM 变量来调取出一个随机的数值(范围为0~ 32767),然后将这个随机数对1000进行取余操作,在 Bash 中进行算术运算的方式有多种,比如使用
expr
命令、使用$[ ]
或$(( ))
等符号。在这里我们使用的是$(( ))
符号来进行算术运算,再用这个数值与用户通过read命令输入的数值进行比较判断。这个判断语句分为3种情况,分别判断用户输入的数值是等于、大于还是小于使用expr命令取得的数值。当while条件循环语句中的条件测试始终为true,因此判断语句 会无限执行下去,直到用户输入的数值等于expr命令取得的数值后,才运行exit 0命令, 终止脚本的执行。
在脚本中,我们添加了一些交互式的信息,从而使得用户与系统的互动性得以增强。而且每当循环到let TIMES++命令时都会让TIMES变量内的数值加1,用来统计 循环总计执行了多少次。这可以让用户得知在总共猜测了多少次之后,才猜对价格
使用 % 1000
运算符,可以将随机数限制在0到999之间,以便与商品价格的范围相匹配。换句话说,这一操作可以确保生成的随机数在指定的范围内。
[root@localhost ~]# cat number.sh
#!/bin/bash
PRICE=$(( $RANDOM % 1000 ))
TIMES=0
echo "商品价格为0~999之间,你能猜中吗???"
while true
do
read -p " 请输入你猜的价格:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE,总共猜测了 $TIMES次"
exit
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
let
是 Bash 中一个用于执行算术运算的内置命令。它的作用是对变量进行算术运算并更新变量的值。在这个脚本中,let TIMES++
的作用是将变量TIMES
的值加1,即记录用户猜测的次数。
[root@localhost ~]# bash number.sh
商品价格为0~999之间,你能猜中吗???
请输入你猜的价格:500
太高了!
请输入你猜的价格:400
太高了!
请输入你猜的价格:300
太低了!
请输入你猜的价格:350
太高了!
请输入你猜的价格:340
太高了!
请输入你猜的价格:330
太高了!
请输入你猜的价格:320
太高了!
请输入你猜的价格:310
太低了!
请输入你猜的价格:311
太低了!
请输入你猜的价格:312
太低了!
请输入你猜的价格:313
太低了!
请输入你猜的价格:314
太低了!
请输入你猜的价格:315
太低了!
请输入你猜的价格:316
太低了!
请输入你猜的价格:317
恭喜您答对了,实际价格是 317,总共猜测了 15次
当条件为true(真)的时候,while语句会一直循环下去,只有碰到exit才会结束