Bir programda, bir değişkeni 0 veya 1 olarak rastgele bir değere ayarlamam gerekir.
Bunu nasıl yapacağımı anlayamıyorum ve Google beni başarısızlığa uğrattı.
Bir programda, bir değişkeni 0 veya 1 olarak rastgele bir değere ayarlamam gerekir.
Bunu nasıl yapacağımı anlayamıyorum ve Google beni başarısızlığa uğrattı.
Yanıtlar:
Kolay bir yöntem, $RANDOM[0; 32767]. Bunu [0; 1] rastgele sayının modulo 2'sini hesaplayarak:
echo $(( $RANDOM % 2 ))
Bash's hakkında daha fazla bilgi $RANDOM: http://www.tldp.org/LDP/abs/html/randomvar.html
Bu basit yapı ile, bu çizgi romandaki gibi rasgele kullanarak güçlü komut dosyaları kolayca oluşturabilirsiniz ...
$[]sözdizimini kullanıyorlar - rmbu --no-preserve-rootözelliğe sahip olup olmadıklarını kim bilebilir ?
rm: it is dangerous to operate recursively on '/' rm: use --no-preserve-root to override this failsafeve oyunu kaybettiklerini bilerek, disklerini ddonurla silmeye devam etmeleri .
--no-preserve-rootSadece "son zamanlarda" uygulandı. Ne zaman uygulandığı hakkında hiçbir bilgi yok, ancak IIRC sadece birkaç yaşında. Linux söz konusu olduğunda bu küçük bir miktar. İşte bu konuda bir bilet: bugs.launchpad.net/ubuntu/+source/coreutils/+bug/174283
Kullanabilirsin 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
Misal:
$ 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
Nasıl olur:
#!/bin/bash
r=$(($RANDOM % 2))
echo $r
Ya da:
r=$(($(od -An -N1 -i /dev/random) % 2))
Ya da belki:
r=$(seq 0 1 | sort -R | head -n 1)
Veya daha hackily:
r=$(($(head -128 /dev/urandom | cksum | cut -c1-10) % 2))
Ve ayrıca:
r=$(apg -a 1 -M n -n 1 -m 8 -E 23456789 | cut -c1)
Hem de:
r=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))
Bu komut dosyasının mevcut yanıtlara göre hiçbir faydası yoktur. Sadece eğlence amaçlı ...
Bir bayt al /dev/urandom(genel olarak beklenmedik / kafa karıştırıcı sonuçlar verebileceğinden konsola rastgele ikili karakterler göndermeniz önerilmez ™):
head -c 1 /dev/urandom
Ve ondalık sayıya dönün:
head -c 1 /dev/urandom | od -An -t u1
Ve bölünmesinin kalanını 2'ye getirin:
echo $((`head -c 1 /dev/urandom | od -An -t u1` % 2))
--no-preserve-root- belki de umdukları Rus Ruleti oyunu değil ...