LoginSignup
7
6

More than 5 years have passed since last update.

シェルスクリプトでの疑似乱数の取得

Last updated at Posted at 2013-03-06

相変わらず 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 から引数で指定した値までの範囲の乱数が取得できる。

7
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6