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以上の値が取り出せないが、これなら取り出せる。