【レビュー】

シェルやシェルスクリプトで乱数を使う2つの方法

後藤大地  [2010/04/30]

The main aim is to document the hurdles that most of us face as UNIX/Linux/BSD sys admin in our day today life.

シェルまたはシェルスクリプトで乱数を使いたいと思うことが時々ある。コマンドをまとめていくという軽い利用を越えて、プログラミング的な要素が強くなってくる場合にはそうした要求がでてくる。しかしシェルスクリプトは一般的なプログラミング言語ではないため、乱数を生成するような関数は提供されていない。

シェルやシェルスクリプトで乱数を使う方法はいくつかあるが、Bash Shell Generate Random Numbers - nixCraftにおいて紹介されている2つの方法が、ひとつは簡単な方法、もうひとつはシェルに左右されにくい互換性の高い方法として興味深い。紹介されているテクニックは次の2つ。

1. RANDOM変数を使う方法

bashおよびzshにはRANDOMというシェル変数が用意されている。使うごとに違う数字が格納される変数。bashまたはzshを使っている場合にはもっとも手軽に乱数を使える方法といえる。bashのマニュアルには0から32767までの整数がランダムに格納されると説明がある。通常は剰余演算で丸め込んで利用する。$RANDOMは便利な方法だが、bashではない/bin/shでは利用できない。

# echo $RANDOM
23631
# echo $RANDOM
22179
# echo $(( $RANDOM % 5 ))
3
# echo $(( $RANDOM % 5 ))
1
# echo $(( $RANDOM % 5 ))
2
#

2. /dev/randomまたは/dev/urandomを使う方法

OSに用意されている乱数疑似デバイスファイルを使うと、シェルの種類に関係なく乱数を利用できる。Bash Shell Generate Random Numbersには次のようにod(1)コマンドを使って乱数疑似デバイスファイルからデータを読み込み乱数として使う方法が紹介されている。

# od -vAn -N4 -tu4 < /dev/random
                880201283                                                
# od -vAn -N4 -tu4 < /dev/random
               1108052704                                                
# od -vAn -N4 -tu4 < /dev/urandom
                272583946                                                
# od -vAn -N4 -tu4 < /dev/urandom
               4284800734                                                
# echo $(( $(od -vAn -N4 -tu4 < /dev/random) % 5 ))
3
# echo $(( $(od -vAn -N4 -tu4 < /dev/random) % 5 ))
4
#

od(1)コマンドで読み込む場合、-N4の指定が読み込むデータのバイト数になっているため、ここの数値を調整することでもっと小さい乱数を得ることも可能。-N3、-N2、-N1などが使用できる。この場合、出力が-tu4と指定されているため、-Nの指定を4以上にしても出力される数の桁はそれ以上は増えない。



IT製品 "比較/検討" 情報

転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

特別企画 PR

人気記事

一覧

イチオシ記事

新着記事

V6森田剛&三宅健の絆伝わるエピソードに感動の声「剛健尊い」「涙出た」
[00:40 5/28] エンタメ
TVアニメ『テラフォーマーズ リベンジ』、第9話のあらすじ&場面カット紹介
[00:14 5/28] ホビー
『ジョジョ』第4部、第9話の先行場面カット&あらすじを公開ッ!
[00:01 5/28] ホビー
アニメ「初恋モンスター」ナレーションは大塚明夫!茅野愛衣や武内駿輔も出演
[00:00 5/28] ホビー
[初恋モンスター]大塚明夫がナレーション 茅野愛衣、武内駿輔も
[00:00 5/28] ホビー

特別企画 PR

求人情報