shell脚本习题—猜数字

嵌入式技术

1332人已加入

描述

需求:写一个猜数字脚本,目标预设数字需要随机生成,范围为0-100,当用户输入的数字和预设数字一样时,提示用户猜对,然后直接退出,否则需要提示用户比预设数字大或者小,然后让用户持续输入。

需求分析:

1. 生成一个随机0-100的数字,可以通过shell里的RANDOM变量获取一个随机数,但这个数可能大于100,所以还需要用该随机数除以100,取余获得一个小于100的随机数字。

 

n=$[$RANDOM%100]
echo $n

 

2. 利用read -p实现和用户交互,让用户输入数字

 

read -p "请输入一个数字,范围0-100: "n1

 

3. 比较两个数的大小,当用户输入的数字大于预设数字时,提示“你输入的数字小了”,当用户输入的数字大于预设数字时,提示“你输入的数字大了”,正好相等时,提示“恭喜你猜对了”,关键代码如下:

 

if [ $n1 -gt $n ]
then
    echo "你输入的数字大了"
elif [ $n1 -lt $n ]
then
    echo "你输入的数字小了"
else
    echo "恭喜你猜对了"
fi

 

4. 当没有猜对数字时,应该让用户再次输入数字,所以这里需要有一个死循环,使用while比较合适,当数字不对时,应该使用continue进行新的循环,当猜对了就要使用break跳出循环。关键代码如下:

 

while :
do
read -p "请输入一个数字,范围0-100: " n1
if [ $n1 -gt $n ]
then
    echo "你输入的数字大了"
    continue
elif [ $n1 -lt $n ]
then
    echo "你输入的数字小了"
    continue
else
    echo "恭喜你猜对了"
    break
fi
done

 

5. 生成随机数的步骤不应该放到循环里面,而是放到循环外面,因为到循环里面就会导致每次循环都会是新的数字,用户永远都猜不到答案。

最终,脚本是这样的:

 

#!/bin/bash
n=$[$RANDOM%100]
while :
do
    read -p "请输入一个数字,范围0-100: " n1
    if [ $n1 -gt $n ]
    then
        echo "你输入的数字大了"
        continue
    elif [ $n1 -lt $n ]
    then
        echo "你输入的数字小了"
        continue
    else
        echo "恭喜你猜对了"
        break
    fi
done

 

执行脚本,效果如下:

Shell

猜数字有个技巧,要用取中间值的方法,比如我们第一次就直接猜50,提示大了,那么最终范围缩小到0-50,所以再取中间值25,还是大了,再取中间值13,结果就对了。

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分