学习shell的基本语法
- 声明一个要猜的数字num
- 获得命令行中输入的内容input_num
- 然后判断num和input_num是否相等、偏大或偏小
- 相等:退出循环
- 偏大或偏小:告知
- 循环执行
需要的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
的作用相同
改进方案
-
生成随机的数字
-
确定数字范围(否则这在酒桌上就没人能喝到酒了)
随机数字
通过函数实现,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