var=$RANDOM
乱数を作成しますが、たとえば0から12のような範囲を指定するにはどうすればよいですか?
6 に答える
すでに乱数を持っている場合は、次のように言うことができます
var=$RANDOM
var=$[ $var % 13 ]
から数値を取得します0..12
。
編集:$x
からまでの
数値を生成する場合は$y
、これを簡単に変更できます。
var=$[ $x + $var % ($y + 1 - $x) ]
0から12の間(含まれています):
echo $((RANDOM % 13))
編集:この方法は厳密には正しくないことに注意してください。32768は13の倍数ではないため、0から8が生成される確率は、残りの数値(9から12)よりもわずかに高くなります(0.04%)。
バランスの取れた出力を提供するシェル関数は次のとおりです。
randomNumber()
{
top=32768-$((32768%($1+1)))
while true; do
r=$RANDOM
[ r -lt $top ] && break
done
echo $((r%$1))
}
もちろん、範囲のより高い値が32767を超える場合は、より良いものを設計する必要があります。
Linux(正確にはcoreutils)で利用可能なshufを使用する代替手段:
var=$(shuf -i0-12 -n1)
どうぞ
echo $(( $RANDOM % 12 ))
これがお役に立てば幸いです。
このドキュメントには、RANGEやFLOORなどの使用例がいくつかあります。http://tldp.org/LDP/abs/html/randomvar.html
FreeBSDおよびおそらく他のBSDでは、以下を使用できます。
jot -r 3 0 12
3
これにより、0から12までの乱数が作成されます。
別のオプションとして、スクリプトごとに1つの乱数のみが必要な場合は、次のことができます。
var=$(( $$ % 13 ))
これにより、スクリプトのPIDがシードとして使用されますが、これはほとんどランダムである必要があります。範囲も0から12になります。