【发布时间】:2020-05-12 09:24:47
【问题描述】:
刚刚完成了一个要求用户猜测 1 到 100 之间的数字的数字生成器游戏的脚本,我很好奇是否有办法让脚本只接受 1-100 数字范围之间的数字并拒绝任何字母人物?我尝试使用
typeset -i
但我不确定我是在充分利用它还是遗漏了什么,这是其余的代码
#!/bin/bash
num=$((RANDOM%100))
typeset -i attempts=0
until [[ $guess == $num ]]
do
echo -n "Enter your guessing number: "
read -r guess
if (( guess < num ));
then echo "Guess Higher..."
elif (( guess > num ));
then echo "Guess Lower..."
fi
(( attempts++ ))
done
printf "Congradulations! it took $attempts guesses!\n"
【问题讨论】:
-
你的代码运行了吗?如果输入超出所需范围 (1..100) 的数字会怎样?如果输入非整数(例如,字母或单词)会怎样?
-
是的,代码按预期运行,如果我输入超出范围的字符或数字,脚本仍然接受它并告诉“猜测更高......”我只需要它拒绝字符或数字范围之外的数字。
-
我相信
typeset -i只是将任何非整数的后续分配视为0 -
@jhnc :这仅适用于分配带有非数字的字符串。如果我分配一个以数字开头的混合字符串,例如
5Z,我会收到神秘的错误消息 value too great for base 并且变量的值不会改变(即不强制零)。因此,“穷人的检查器”确实是typeset -i guess,在读取之前将变量显式设置为0,然后测试它是否在数字允许的范围内。
标签: linux bash random scripting generator