概要
Bashシェルスクリプト$RANDOM
を使って、任意の範囲までの乱数を生成したり、小数点以下の範囲で生成したりしましたのでまとめます。
$RANDOM
とは
Bashシェルスクリプトで使用できる特殊な環境変数。
$PATH
とかと同じ組み込み変数ですね。
0から32767までの範囲の疑似乱数を生成します。
16ビット符号なし整数(2の16乗 - 1)の範囲に相当。
システムの現在時刻をシード値として使用し、それに基づいて乱数を生成するとか。
サンプルスクリプト
test-random.sh
#!/bin/bash
# 現在の日付の時刻
echo `date "+%Y/%m/%d %H:%M:%S"`
# 0 〜 32767 の間でランダムな数値を取得
echo $RANDOM
# 0 〜 65535 の間でランダムな数値を取得
echo $((RANDOM + RANDOM))
# 1から6までのランダムな整数を生成 (サイコロの目)
echo $((RANDOM % 6 + 1))
# 0からNまでの範囲の乱数を生成
N=10 # Nを設定
echo $((RANDOM % (N + 1)))
# ランダムな浮動小数点数を生成
echo $(bc <<< "scale=5; $RANDOM/32767")
出力結果:
2023/09/14 23:17:59
19929
40718
5
1
.34003
小数点以下5桁までの精度で0から1の間の乱数を生成
echo $(bc <<< "scale=5; $RANDOM/32767")
上記について。
-
bc
コマンド: 任意の精度で計算を行うためのコマンドライン -
<<<
演算子: ヒアストリング(here string)を提供。ヒアストリングを使用すると、文字列をコマンドに渡すことができる。 -
"scale=5; $RANDOM/32767"
: ヒアストリングによって、bcに渡される計算式。-
scale=5
: 小数点以下5桁を指定 -
$RANDOM
:0から32767までのランダムな整数を生成 -
/32767
:32767で割って、0から1の範囲の浮動小数点数を生成
-
これにより、小数点以下5桁までの精度で0から1の間のランダムな浮動小数点数を生成できます。
5桁を指定しない場合は、-l
オプションをつける必要があります。これは、"load"
を意味し、bc
コマンドが起動するときに数学ライブラリを読み込むためのオプションです。
echo $(bc -l <<< "$RANDOM/32767")
# 結果
# .02777184362315744499