【发布时间】:2012-02-01 04:17:53
【问题描述】:
我正在尝试创建一个随机数生成器,它生成一个介于 1 到 99 之间的数字,但不是任何已经生成的数字。
在脚本中 array1 包含已经生成的数字。为了更容易测试,我将随机数范围减少到 0 - 14 并手动创建了一个数组。
我对 bash 脚本还很陌生,并且通过几本书和互联网来学习它。
我尝试了各种想法,似乎最有意义的一个是
array1=( 1 2 3 6 7 8 9 10 11 12 13 )
func1() {
for var in "${array1[@]}"
do
echo $var
done
}
rnd=$[ $RANDOM % 14 ]
until [ $rnd != func1 ]
do
rnd=$[ $RANDOM % 14 ]
done
echo $rnd
但是我知道问题出在第 9 行,shell 看到以下代码:
until [ $rnd != 1 2 3 6 7 8 9 10 11 12 13 ]
我知道解决方案是第 9 行需要:
until [ $rnd != 1 ] && [ $rnd != 2 ] && [ $rnd != 3 ] && ...
我只是不知道如何从数组中自动实现这一点。数组的长度会根据生成的数字数量而有所不同。
任何帮助将不胜感激!
【问题讨论】:
-
查找“随机排列”和“Knuth shuffle”。
-
不推荐使用
rnd=$[ $RANDOM % 14 ]形式。请改用((rnd = $RANDOM % 14))。如果你有shuf实用程序,你可以使用shuf -i 0-14。
标签: arrays bash random numbers