0から2147483647までの間の乱数を取得する

bashだと$RANDOMで乱数は取得できるけど、0〜32767までしか取得できない。それ以上の乱数を手っ取り早く取得できないかと思い探している内に以下に落ち着いた。

コード

#!/usr/bin/env bash

while :;
do
  random32=$((($RANDOM & 1)<<30 | $RANDOM<<15 | $RANDOM))
  echo ${random32}
done

これを、random32.shみたいな名前で保存しておく。
実際に使う場合は以下のようになる。無限ループさせているので、延々出力し続ける。

$ ./random32.sh
2062042316
1359327322
286514404
1256198400
1891772729
以下省略・・・

一つだけ取り出した場合は、"./random32.sh | head -n 1"みたいにする。

$ ./random32.sh | head -n 1
695679400

一定の値より小さい乱数を取り出したい場合は以下のようにする。

$ ./random32.sh | xargs -n 1 -I {} expr {} % 65536
42128
52300
58834
22831
13975
52221
21935
62329
以下省略・・・

xargsを使って65536で割ったあまりを出力する。$RANDOMだと上限が32767のため、65536で割っても32767以上の値が取り出せないが、これなら取り出せる。