乱数が必要

乱数が必要

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でテストされました。楽しくお過ごしください!

関連情報