Bir değişkeni bash ile rastgele bir değere ayarlama


14

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:


30

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 ...

Tamamlama Şeridi - Rus Ruleti


4
İçimdeki bilgiç, seçilen üretim sunucusu yok etme komutunun olmadan hiçbir şey yapmayacağını belirtmek zorunda olduğunu hissediyor --no-preserve-root- belki de umdukları Rus Ruleti oyunu değil ...
Örümcek Boris

2
@BoristheSpider antika $[]sözdizimini kullanıyorlar - rmbu --no-preserve-rootözelliğe sahip olup olmadıklarını kim bilebilir ?
muru

10
@BoristheSpider Çizgi roman hakkındaki yorumum, mesajı gördüklerinde başlarını aşağı asmaları 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 .
Eliah Kagan

@EliahKagan ah, seppuku. Anladım.
Örümcek Boris

@BoristheSpider: --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
Apache

13

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

5

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))

1

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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.