相変わらず blog からの転載
bash (1) には ${RANDOM}
というシェル変数が用意されていて、 アクセスするたびに疑似乱数(風)の値が取得できるが、bash (1) 独自の機能なので拡張性がない。そこで汎用的な疑似乱数取得の方法として awk (1) を利用した方法を使ってみる。
awk (1) には rand() という関数が組込まれているので疑似乱数が生成できる。 その際に利用される種(seed)は srand() という関数で初期化する。
ただし awk (1) の rand() は仕様として 0 ~ 1 までの桁数不定の少数を返すので、乱数として利用する場合には整数に変換する必要がでてくる。
そこで、整数にするために rand() で取得した値の前 2 文字 ("0.") 以降を切り出した文字列を乱数として使用する様にしている。
データの型がない(文字列であり数字である)awk (1) ゆえの小技じゃないかな。
random.sh
# !/bin/sh
awk 'BEGIN{
srand();
print substr(rand(), 3) % '${1:-1}'
}'
引数なしでこのスクリプトを実行すると乱数が取得できる。
引数で整数を指定すると 0 から引数で指定した値までの範囲の乱数が取得できる。