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

版权声明:本文为xinyan233原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。