Как генерировать случайное число в Bash?

Самое легкое должно было бы получить второе значение от этого набора результатов в приложении:

SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2

, Но если необходимо выбрать второе значение с помощью SQL, как насчет:

SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t
191
задан LinuxSecurityFreak 5 June 2016 в 00:33
поделиться

6 ответов

Есть $ RANDOM. Я точно не знаю, как это работает. Но это работает. Для тестирования вы можете сделать:

echo $RANDOM
18
ответ дан 23 November 2019 в 05:32
поделиться

Попробуйте это из своей оболочки:

$ od -A n -t d -N 1 /dev/urandom

Здесь -td указывает, что выходной формат должен быть десятичным со знаком; -N 1 говорит читать один байт из / dev / urandom .

35
ответ дан 23 November 2019 в 05:32
поделиться

См. $ RANDOM :

$ RANDOM - это внутренняя функция Bash. (не константа), которая возвращает псевдослучайное целое число в диапазоне 0 - 32767. Его не следует использовать для сгенерируйте ключ шифрования.

68
ответ дан 23 November 2019 в 05:32
поделиться

вы также можете получить случайное число из awk

awk 'BEGIN {
   # seed
   srand()
   for (i=1;i<=1000;i++){
     print int(1 + rand() * 100)
   }
}'
20
ответ дан 23 November 2019 в 05:32
поделиться

Используйте $ RANDOM . Это часто полезно в сочетании с простой арифметикой оболочки. Например, для генерации случайного числа от 1 до 10:

$ echo $((1 + RANDOM % 10))
3

Фактический генератор находится в variables.c , функция brand () . Старые версии представляли собой простой линейный генератор. Версия 4.0 bash использует генератор со ссылкой на статью 1985 года, что, по-видимому, означает, что это достойный источник псевдослучайных чисел. Я бы не стал использовать его для моделирования (и, конечно, не для криптографии), но он, вероятно, подходит для базовых задач написания сценариев.

Если вы делаете что-то, что требует серьезных случайных чисел, вы можете использовать / dev / random или / dev / urandom , если они доступны:

$ dd if=/dev/urandom count=4 bs=1 | od -t d
230
ответ дан 23 November 2019 в 05:32
поделиться

Если вы используете систему Linux, вы можете получить случайное число из / dev / random или / dev / urandom. Будьте осторожны, / dev / random будет блокироваться, если доступно недостаточно случайных чисел. Если вам нужна скорость, а не случайность, используйте / dev / urandom.

Эти «файлы» будут заполнены случайными числами, сгенерированными операционной системой. Получение истинных или псевдослучайных чисел зависит от реализации / dev / random в вашей системе. Истинные случайные числа генерируются с помощью шума, собираемого драйверами устройств, такими как мышь, жесткий диск, сеть.

Вы можете получить случайные числа из файла с помощью dd

6
ответ дан 23 November 2019 в 05:32
поделиться