【发布时间】:2023-02-03 02:40:43
【问题描述】:
我正在尝试学习 bash,所以我正在研究“猜数字”类型的游戏。我正试图根据用户输入的下限和上限生成随机数。但是一些测试用例似乎创建了没有意义的数字;有些超出了我的范围,有些则不是我所期望的。
这是我的程序
echo "Enter the lower bound: "
echo -n "> "
read lowerBound
while [ "$lowerBound" -lt 0 ]
do
echo "Lower bound must be >= 0. Please try again: "
echo -n "> "
read lowerBound
done
echo
echo "Enter the upper bound: "
echo -n "> "
read upperBound
lowerLimit=$(($lowerBound + 1))
while [ "$upperBound" -lt "$lowerLimit" ]
do
echo "Upper bound must be larger than lower bound. Please try again: "
echo -n "> "
read upperBound
done
echo
randNum=$(( $RANDOM % ( ($upperBound - $lowerBound) + 1 ) ))
echo "RANDOM=$RANDOM randNum=$randNum"
这是产生意外结果的输出。我希望 6: (9237 % (10-1+1) = 7 但输出是 5)
Enter the lower bound:
> 1
Enter the upper bound:
> 10
RANDOM=9237 randNum=5
最后这里是一些输出,其中生成的数字超出了我的范围。我通过自己做数学来理解这一点,但认为这个方程应该生成一个范围内的随机数。这里 26921 % (126-123+1) = 9237。9237 在后续运行中出现很可能只是巧合。
Enter the lower bound:
> 123
Enter the upper bound:
> 126
RANDOM=26921 randNum=0
我不确定我的等式是否有误,或者我在 Bash 中做错了什么。任何指针将不胜感激。
注意:我不是编程新手,只是 Bash 新手。
【问题讨论】: