我一直在想这将是获得最佳的方式很好在bash,即随机性,这将是一个过程,以获得之间的随机正整数MIN
,并MAX
使得
在 bash 中获得随机性的一种有效方法是使用$RANDOM
变量。但是,这仅对 0 到 2 15 -1之间的值进行采样,这对于所有用途来说可能不够大。人们通常使用模数将其置于他们想要的范围内,例如,
MIN=0
MAX=12345
rnd=$(( $RANDOM % ($MAX + 1 - $MIN) + $MIN ))
Run Code Online (Sandbox Code Playgroud)
此外,这会产生偏差,除非$MAX
碰巧除以 2 15 -1=32767。例如,如果$MIN
是 0 并且$MAX
是 9,那么值 0 到 7 的可能性比值 8 和 9 稍大,$RANDOM
永远不会是 32768 或 32769。随着范围的增加,这种偏差会变得更糟,例如,如果$MIN
是 0 并且$MAX
是9999,那么数字 0 到 2767 的概率为4 / 32767,而数字 2768 到 9999 的概率仅为 …
我有这个脚本,
#!/bin/sh
guess=$(echo $RANDOM | cut -b 1-2)
read -p "Im thinking of a number, can you guess what it is? " number
case "$number" in
"$guess") echo "\nCongratulation number guessed corectly!"
exit 0
;;
*) echo "\nIncorrect number guessed, try again? [yes or no]"
read yesorno
case "$yesorno" in
"yes") sh guess.sh
;;
"no") echo "\nHave a nice day!"
exit 0
;;
*) echo "Invalid input"
exit 1
;;
esac
;;
esac
Run Code Online (Sandbox Code Playgroud)
变量 $guess 应该返回一个 2 位数字,但返回 null。运行游戏sh …