Как установить переменную на случайное значение с ударом

В программе я должен установить переменную на случайное значение или 0 или 1.

Я не могу выяснить, как сделать это, и Google привел меня к сбою.

14
задан 19 January 2017 в 04:14

4 ответа

Один легкий метод должен использовать $RANDOM для получения псевдослучайного целого числа на 16 битов в диапазоне [0; 32767]. Можно просто преобразовать это в [0; 1] путем вычисления по модулю 2 из случайного числа:

echo $(( $RANDOM % 2 ))
[еще 117] информация о Bash $RANDOM: http://www.tldp.org/LDP/abs/html/randomvar.html

С той простой конструкцией можно легко создать мощные сценарии с помощью случайности, как в этом комике...

Commit Strip - Russian Roulette

30
ответ дан 23 November 2019 в 02:53

Вы могли использовать 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

Пример:

$ 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
13
ответ дан 23 November 2019 в 02:53

Как насчет:

#!/bin/bash
r=$(($RANDOM % 2))
echo $r

Или даже:

r=$(($(od -An -N1 -i /dev/random) % 2))

Или возможно:

r=$(seq 0 1 | sort -R  | head -n 1)

Или более hackily:

r=$(($(head -128 /dev/urandom | cksum | cut -c1-10) % 2))

И также:

r=$(apg -a 1 -M n -n 1 -m 8 -E 23456789  | cut -c1)

, А также:

r=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))
5
ответ дан 23 November 2019 в 02:53

Этот сценарий не обладает никакими преимуществами по существующим ответам. Только в целях развлечений...

Получают один байт от /dev/urandom (хотя в общих передающих произвольных двоичных символах к консоли не recommendedв „ў, потому что это могло бы дать неожиданные/сбиваемые с толку результаты):

head -c 1 /dev/urandom

И заходят в десятичное число:

head -c 1 /dev/urandom | od -An -t u1

И получают остаток от его подразделения 2:

echo $((`head -c 1 /dev/urandom | od -An -t u1` % 2))
1
ответ дан 23 November 2019 в 02:53

Другие вопросы по тегам:

Похожие вопросы: