Zufallszahl erforderlich

Zufallszahl erforderlich

Ich brauche ein Kommandozeilenskript, das eine zufällige Ganzzahl zwischen 1 und 6 generiert. Ich verwende Ubuntu mit Bash.
Ich habe vor ein paar Monaten mit „bc“ daran gearbeitet, aber es hat nie richtig funktioniert. Ich habe inzwischen vergessen, wo ich gelandet bin.

Ich verwende dies, um ein Crontab-Skript so zu ändern, dass es nicht immer alle 15 Minuten, sondern zu zufälligen Zeiten (15 + 3 Minuten) ausgeführt wird. D. h. ich ändere die Crontab so, dass sie alle 12 Minuten ausgeführt wird, und pausiere dann im Skript 1 bis 6 Minuten, bevor das Skript ausgeführt wird (was im Grunde ein Wget zum Überprüfen des Status einer Webseite ist).

Antwort1

Siehe Man Bash,PARAMETERAbschnitt,Shell-VariablenUnterabschnitt:

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.

Um den Wert auf das Intervall 1..6 zu beschränken, verwenden Sie den $((RANDOM%6+1))Ausdruck. 1

Oder Sie verwenden /dev/urandomFolgendes:

tr -dc '1-6' < /dev/urandom | head -c 1

Antwort2

Ich kann einen benutzerdefinierten linearen kongruenten Zufallsgenerator vorschlagen oder X(n+1) = (343*X(n) ) % M17, wobei M17= 2^17 - 1 = 131071 die Mersenne-Primzahl ist (p=17). Die pseudozufällige Folge ist gleichmäßig verteilt mit einem Bereich [0,131070], dann können Sie den Bereich wie folgt auf [1,6[ begrenzen: Z6 = 6*X(n)/M17 + 1

Beispielcode:

#!/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

Dies ist ein einmaliger Zufallsgenerator. Wenn Sie eine zufällige Sequenz benötigen, 10#date +%Nmuss der Seed nur einmal zum Starten verwendet werden und der Generator muss in einer Schleife verwendet werden. Getestet auf Ubuntu 12.04 LTS. Viel Spaß!

verwandte Informationen