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
開始時に 1 回だけ使用し、ジェネレータはループで使用してください。Ubuntu 12.04 LTS でテスト済みです。お楽しみください。