1から6の間の任意の整数を生成するには、コマンドラインスクリプトが必要です。私はUbuntuとBashを使います。
私は数ヶ月前にこの問題を解決するために「bc」を使用しましたが、完全には機能しませんでした。それから私はどこに行ったのか忘れました。
私はこれを使用して、crontabスクリプトが常に15分ごとに実行されるのではなく、ランダムに(15 + -3分)実行されるように変更します。つまり。 crontabを12分ごとに変更し、スクリプトを実行する前に1〜6分間スクリプトで待機します(デフォルトではWebページの状態を確認するためのwgetです)。
答え1
誰かが強く叩くのを見て、パラメータ部分、シェル変数部分:
RANDOM Each time this parameter is referenced, a random integer between 0 and 32767 is generated. The sequence of random numbers may be initialized by assigning a value to RANDOM. If RANDOM is unset, it loses its special properties, even if it is subsequently reset.
値を1..6間隔に制限するには、式を使用します$((RANDOM%6+1))
。 1
または、/dev/urandom
次のように使用できます。
tr -dc '1-6' < /dev/urandom | head -c 1
答え2
カスタムリニアジョイント乱数ジェネレータまたはX(n + 1)=(343 * X(n))%M17を考えることができます。ここで、M17 = 2^17 - 1 = 131071はメルセン素数(p = 17)です。擬似乱数シーケンスは [0,131070] の範囲に均一に分布しており、次のように範囲を [1,6[) に制限できます。 Z6 = 6*X(n)/M17 + 1
サンプルコード:
#!/bin/bash
M=6 #change this if you need different ranges
let "z=(343*10#`date +%N`)%131071"
let "z=$M*z/131071+1"
echo $z
これはワンタイムランダムジェネレータです。ランダムシーケンスが必要な場合は、シードを10#date +%N
開始するために一度だけ使用し、ジェネレータはループで使用する必要があります。 Ubuntu 12.04 LTSでテストされました。楽しくお過ごしください!