shell脚本实现猜数字游戏

学习shell的基本语法

  1. 声明一个要猜的数字num
  2. 获得命令行中输入的内容input_num
  3. 然后判断num和input_num是否相等、偏大或偏小
    • 相等:退出循环
    • 偏大或偏小:告知
  4. 循环执行

需要的shell知识

  • 变量的声明和使用
  • 读取输入内容
  • shell中字符串和数字的比较
  • while语法

根据需求写出如下代码

#!/bin/bash

num=56

while :
do
   printf "请输入数字:"
   read input_num
   if [ $input_num -lt $num ]
   then
       echo "小了"
   elif [ $input_num -gt $num ]
   then 
       echo "大了"
   elif [ $input_num == $num ]
   then
       echo "对了,是这个$num,走一个"
       break
   else
       echo "输入正确的值哦"
   fi
done

考虑的字符串与数字比较是多余的,在if中判断大小,大于应该表示为-gt,小于应表示为-lt

另外通过查阅资料了解到:

  • 大于等于表示为-ge,小于等于则是-le

  • ==-eq的作用相同

改进方案

  1. 生成随机的数字

  2. 确定数字范围(否则这在酒桌上就没人能喝到酒了)

随机数字

通过函数实现,shell中的函数如果不写return则将最后一行的输出作为返回值

1. 通过$RANDOM 实现

$RANDOM 的范围是 [0, 32767]

# rand函数接收两个参数作为随机的范围 例如:rand(0, 100) 即 随机生成一个0到的数

function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(($RANDOM+1000000000)) #增加一个10位的数再求余
    echo $(($num%$max+$min))
}
2. 使用date +%s%N
function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(date +%s%N)
    echo $(($num%$max+$min))
}

最后的结果

#!/bin/bash

function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(($RANDOM+1000000000))
    echo $(($num%$max+$min))
}

s=1
e=100

num=$(rand $s $e)

while :
do
   printf "请输入数字(范围$s-$e):"
   read input_num
   if [ $input_num -lt $s ] || [ $input_num -gt $e ]
   then
       echo "超出范围,走一个"
       break
   else
       if [ $input_num -lt $num ]
       then
           s=`expr $input_num + 1`
           echo "小了"
       elif [ $input_num -gt $num ]
       then
           e=`expr $input_num - 1`
           echo "大了"
       elif [ $input_num == $num ]
       then
           echo "对了, 是这个 $num"
           break
       else
           echo "输入正确的值哦"
       fi
    fi
done
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值