В программе мне нужно установить переменную на случайное значение 0 или 1.
Я не могу понять, как это сделать, и Google подвел меня.
В программе мне нужно установить переменную на случайное значение 0 или 1.
Я не могу понять, как это сделать, и Google подвел меня.
Ответы:
Один простой способ - использовать $RANDOM
для получения псевдослучайного 16-битного целого числа в диапазоне [0; 32767]. Вы можете просто преобразовать это в [0; 1] путем вычисления по модулю 2 случайного числа:
echo $(( $RANDOM % 2 ))
Более подробная информация о Bash $RANDOM
: http://www.tldp.org/LDP/abs/html/randomvar.html
С помощью этой простой конструкции вы можете легко создавать мощные сценарии, используя случайность, как в этом комиксе ...
$[]
синтаксис - кто знает, была ли у rm
них эта --no-preserve-root
функция?
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
, они низко опускают голову и, зная, что проиграли игру, приступают к удалению диска с dd
честью.
--no-preserve-root
реализовано только "в последнее время". У меня нет информации о том, когда он был реализован, но IIRC ему всего несколько лет. И это очень мало, когда дело доходит до Linux. Вот билет по этому поводу: bugs.launchpad.net/ubuntu/+source/coreutils/+bug/174283
Вы могли бы использовать 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
Как насчет:
#!/bin/bash
r=$(($RANDOM % 2))
echo $r
Или даже:
r=$(($(od -An -N1 -i /dev/random) % 2))
Или возможно:
r=$(seq 0 1 | sort -R | head -n 1)
Или более счастливым
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))
Этот скрипт не имеет преимуществ перед существующими ответами. Просто для развлекательных целей ...
Получить один байт от /dev/urandom
(хотя отправка произвольных двоичных символов в консоль не рекомендуется ™, поскольку это может привести к неожиданным / запутанным результатам):
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))
--no-preserve-root
рабочего сервера ничего не сделает без этого - так что, может быть, не та игра в русскую рулетку, на которую они надеялись ...