あなたは変数$RANDOM
の値を読み取るたびに、 それはあなただからそれはあなたに十分な範囲を与えるものではありません0から32767で0と2^15 - 1
、 間の乱数を与えます。 $RANDOM
を2桁のbase-15, として使用し、適切なモジュロをとり、適切な範囲正規化を適用できます。
ここでは機能に包まれたロジックです:
randrange() {
min=$1
max=$2
((range = max - min))
((maxrand = 2**30))
((limit = maxrand - maxrand % range))
while true; do
((r = RANDOM * 2**15 + RANDOM))
((r < limit)) && break
done
((num = min + r % range))
echo $num
}
そしてあなたは、このようなループ内でファイルを生成することができますrandrange
の実装における注意点があることが
for i in 01 02 03 04 05; do
echo "AArandom=$(randrange 50000 150000)" > $i.dat
done
注意: 値が偏っている場合にはリロールするループがありますが、理論的にはこの機能が終了しない可能性があります。 実際には、それは非常に起こりそうではありませんが、言及する必要があります。
@Steveない複製、: '$ RANDOM'が範囲' 0で番号を生成 - 32767'が、ここではより大きな範囲があります必須。 – janos
もしbashで何かしたいのなら、 'man bash'はしばしば良いスタート方法です。マニュアルページは長いです。 'random'のようなキーワードを検索してください... –
私は質問が明示的に> 32767の範囲を注記するように言い直されるべきだと思います。 –