Bash でランダムな値を得る「shuf」コマンド

Bash スクリプトの中で、乱数が欲しいと思った。大抵の環境には shuf というコマンドが入っていて、コレを使うと簡単にランダムな値を作れるので紹介。

# 10~30 の値の中で、一つランダムに値を取得する
$ shuf -i 10-30 -n 1
18
# ↑ 出力例

こんな感じで使える。

-i オプションの後に 1-15 のように整数の範囲を指定すると、その範囲内の整数が取得できる。

-n オプションで出力する値の数を設定できる。複数の乱数を出力する場合は以下のようになる。

# 5つ値を取り出す
$ shuf -i 10-30 -n 5
26
25
22
10
16

# 範囲よりも大きい数を指定した場合は…
$ shuf -i 11-13 -n 10
11
13
12

最後の出力例で分かったかと思うが、この shuf コマンド、「乱数を生成する」のではなく、「与えられた値をシャッフルして返している」のが正しい。seq コマンドが「指定範囲の数値を順に出力する」のと比べると似ていて分かりやすいと思う。

$ seq 11 13
11
12
13

まぁとりあえず、コレで「ランダムにいずれかの値が欲しい」という要望は満たせたので、shuf コマンド、覚えましたし。