In einem Programm muss eine Variable auf einen zufälligen Wert von 0 oder 1 gesetzt werden.
Ich kann nicht herausfinden, wie es geht, und Google hat mich im Stich gelassen.
In einem Programm muss eine Variable auf einen zufälligen Wert von 0 oder 1 gesetzt werden.
Ich kann nicht herausfinden, wie es geht, und Google hat mich im Stich gelassen.
Antworten:
Eine einfache Methode besteht darin $RANDOM
, eine pseudozufällige 16-Bit-Ganzzahl im Bereich [0; 32767]. Sie können das einfach in [0; 1] durch Berechnung von Modulo 2 der Zufallszahl:
echo $(( $RANDOM % 2 ))
Weitere Informationen zu Bashs $RANDOM
: http://www.tldp.org/LDP/abs/html/randomvar.html
Mit diesem einfachen Konstrukt können Sie einfach leistungsstarke Skripte mit Zufälligkeit erstellen, wie in diesem Comic ...
$[]
Syntax - wer weiß, ob rm
sie diese --no-preserve-root
Funktion hatten?
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
, den Kopf hängen und, da sie wissen, dass sie das Spiel verloren haben, fortfahren, ihre Festplatte dd
aus Ehre zu löschen .
--no-preserve-root
wurde erst "in letzter Zeit" implementiert. Habe keine Informationen darüber, wann es implementiert wurde, aber das IIRC ist erst ein paar Jahre alt. Und das ist eine winzige Menge, wenn es um Linux geht. Hier ist ein Ticket dazu: bugs.launchpad.net/ubuntu/+source/coreutils/+bug/174283
Du könntest benutzen shuf
DESCRIPTION
Write a random permutation of the input lines to standard output.
-i, --input-range=LO-HI
treat each number LO through HI as an input line
-n, --head-count=COUNT
output at most COUNT lines
Beispiel:
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1
Wie wäre es mit:
#!/bin/bash
r=$(($RANDOM % 2))
echo $r
Oder auch:
r=$(($(od -An -N1 -i /dev/random) % 2))
Oder vielleicht:
r=$(seq 0 1 | sort -R | head -n 1)
Oder hackiger:
r=$(($(head -128 /dev/urandom | cksum | cut -c1-10) % 2))
Und auch:
r=$(apg -a 1 -M n -n 1 -m 8 -E 23456789 | cut -c1)
Ebenso gut wie:
r=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))
Dieses Skript hat keine Vorteile gegenüber vorhandenen Antworten. Nur zur Unterhaltung ...
Holen Sie sich ein Byte von /dev/urandom
(obwohl es im Allgemeinen nicht empfohlen wird, beliebige Binärzeichen an die Konsole zu senden, da dies zu unerwarteten / verwirrenden Ergebnissen führen kann):
head -c 1 /dev/urandom
Und in eine Dezimalzahl umwandeln:
head -c 1 /dev/urandom | od -An -t u1
Und den Rest der Division durch 2 erhalten:
echo $((`head -c 1 /dev/urandom | od -An -t u1` % 2))
--no-preserve-root
- so vielleicht nicht das Spiel der russischen Roulette sie sich erhofft haben ...