Bash で乱数を生成する

Nilesh Katuwal 2023年1月30日
  1. $RANDOM 変数を使用して乱数を生成する
  2. shuf コマンドを使用して乱数を生成する
  3. /dev/urandom を使用して乱数を生成する
  4. awk を使用して乱数を生成する
Bash で乱数を生成する

Bash では、整数または浮動小数点数を使用して乱数を生成できます。bash スクリプトを使用して、特定の範囲またはサイズ内で乱数を作成できます。この記事では、Bash で乱数を生成するためのさまざまな方法を示します。

以下のコマンドを実行すると、異なる乱数が出力される場合があります。

$RANDOM 変数を使用して乱数を生成する

$RANDOM 変数を使用して、0 から 32767 までの乱数またはランダム値の範囲を生成できます。ただし、$RANDOM 値を特定の値で除算することにより、乱数の生成に使用される数値範囲を制限できます。

0 から 32767 までの乱数を生成するには、次のコマンドを使用します。

$ echo $RANDOM

出力:

28091

$RANDOM 変数を残りの値で割ることにより、特定の範囲から乱数を生成できます。$ 記号が付いた二重の最初の括弧 (()) が含まれています。

1 から 100 までの乱数を生成するには、次のコマンドを使用します。

$ echo $(( $RANDOM % 100 + 1 ))

出力:

19

パーセント記号はモジュロ演算の数学演算を失敗させるため、100 という数値に達することはありません(除算後の余り)。ランダムジェネレーターが値 100 を返した場合、モジュロ演算は値 0 を提供します。

shuf コマンドを使用して乱数を生成する

コマンド shuf を使用して、シェルスクリプトで多数の数値を生成できます。

次のコマンドは、0〜100 の単一の整数を作成します。

$ shuf -i 0-100 -n1

出力:

76

上記のコマンドで、-i は入力範囲を示し、-n は人数を示します。キー-n の後には任意の正の数が続き、乱数を生成するための数を示します。次のコマンドを実行して、0〜100 の 5つの乱数を出力します。

$ shuf -i 0-100 -n5

出力:

68
78
24
76
41

/dev/urandom を使用して乱数を生成する

/dev/urandom デバイスファイルを使用すると、$RANDOM 変数よりもはるかにランダムな疑似乱数を生成できます。ただし、これらの数値をスクリプトの変数に入れるには、例に示すように、od によるフィルタリングなどの追加の作業が必要です。

od /dev/urandom  -A n -t d -N 1

-t d オプションは、符号付き 10 進数を出力形式として使用する必要があることを示し、-N 1 は、/dev/urandom から 1 バイトを取得するようにプログラムに指示します。

出力:

124

awk を使用して乱数を生成する

awkrand() 関数は、0 から 1 の範囲のランダムな浮動小数点数を返します。BEGIN に続くコマンドは、次のステップの前に実行されます。

awk 'BEGIN{x=rand(); print x}'

出力:

0.444937