【Shell>实例】while语句构建猜数字游戏

while 条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于 for 循环语句中有目标、有范围的使用场景。 while 循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行,为假就结束循环

这里我们构建一个猜数字游戏的实例来了解while命令以及相关循环的用法。

猜数字游戏想必大家不陌生,由一个人作为裁判,选择一个数字,先指定大致范围,由众人猜测,根据猜测给出“高”或者“低”的评价,然后缩小范围,最后猜中的人有特别的“奖励”。

这里先指定大致的范围为0-999,脚本如下:

#!/usr/bin/env bash
# While usage: guess number

NUMBER=$(expr $RANDOM % 1000 )
TIMES=0

echo "The number is between 0-999, please guess it."

while true
do
    read -p "Please input the number: "  INT
    let TIMES++
    if [ $INT -eq $NUMBER ]; then
        echo "You are right! The number is $NUMBER."
        echo "You guess $TIMES times."
        exit 0
    elif [ $INT -gt $NUMBER ]; then
        echo "Too high... Please guess it again."
    else 
        echo "Too low... Please guess it again."
    fi
done

该脚本使用$RANDOM 变量来调取出一个随机的数值(范围为 0~32767),将这个随机数对 1000 进行取余操作,并使用 expr 命令取得其结果,再用这个数值与用户通过 read命令输入的数值进行比较判断。这个判断语句分为三种情况,分别是判断用户输入的数值是等于、大于还是小于使用 expr 命令取得的数值。当前,现在这些内容不是重点,我们当前要关注的是while 条件循环语句中的条件测试始终为 true,因此判断语句会无限执行下去,直到用户输入的数值等于 expr 命令取得的数值后,这两者相等之后才运行 exit 0 命令,终止脚本的执行。

在这个脚本中,我们添加了一些交互式的信息,从而使得用户与系统的互动性得以增强。而且每当循环到 let TIMES++命令时都会让 TIMES 变量内的数值加 1,用来统计循环总计执行了多少次。

下面看下我的实际猜测过程:

[zhoudan@linuxprobe Desktop]$ ./guessNumber.sh 
The number is between 0-999, please guess it.
Please input the number: 500
Too low... Please guess it again.
Please input the number: 700
Too high... Please guess it again.
Please input the number: 600
Too high... Please guess it again.
Please input the number: 550
Too low... Please guess it again.
Please input the number: 570
Too low... Please guess it again.
Please input the number: 580
Too low... Please guess it again.
Please input the number: 590
Too low... Please guess it again.
Please input the number: 595
Too low... Please guess it again.
Please input the number: 596
Too low... Please guess it again.
Please input the number: 597
Too low... Please guess it again.
Please input the number: 598
Too low... Please guess it again.
Please input the number: 599
You are right! The number is 599.
You guess 12 times.

有兴趣的话,可以自己写写,甚至完善,玩一玩。

引用部分摘自《Linux就该这么学》,脚本代码为适应本文修改。

    原文作者:linux
    原文地址: https://www.jianshu.com/p/b9e4cdd84021
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞