vak: (Default)
[personal profile] vak
Пишу тестики по работе, понадобилось случайное число в некотором диапазоне. Думаю, дай спрошу у искусственного интеллекта, благо под рукой. Как в Линуксе получить случайное целое число из командной строки? Ответ порадовал: три варианта на выбор, все доселе мне неизвестные. Причём на маке ровно так же работает. 

(1) Из bash:
echo $RANDOM
Если нужно число в диапазоне MIN-MAX, делаем:
echo $(( RANDOM % (MAX - MIN + 1) + MIN ))
(2) Командой shuf:
shuf -i MIN-MAX -n 1
Если требуется несколько чисел, единичку заменяем на количество.

(3) Командой openssl можно создать криптографически надёжное случайное число:
openssl rand -hex 4 | xxd -r -p | head -c 4 | od -An -tu4
Тут генерятся четыре случайных байта, преобразуются в беззнаковое целое и отображаются в десятичном виде.

Date: 2025-01-07 01:26 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Мило! Будем знать.

Date: 2025-01-07 01:40 (UTC)
From: [personal profile] nz

echo $(( RANDOM % (MAX - MIN + 1) + MIN ))

это не совсем случайное число.

Date: 2025-01-07 17:23 (UTC)
vlad_m: (Default)
From: [personal profile] vlad_m
Представьте, что RANDOM ,даёт равномерно распределенное от 0 до 15. 4 бита.
Поделите с остатком на 7, например.
Распределение перестанет быть равномерным.

Date: 2025-01-07 02:45 (UTC)
From: [personal profile] dedekha
В таких ситуациях либо использую совсем не случайные числа (если распределение не важно) или постоянный массив чисел из хорошего источника. В тестах нужна повторяемость, а если ее нет то бывает очень очень больно.

Date: 2025-01-07 06:00 (UTC)
From: [personal profile] borisk
Второй способ получил некоторую известность лет пятнадцать тому назад, когда на баше появилась т.н. «Русская рулетка»:
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo *Click*

Date: 2025-01-07 07:24 (UTC)
kondybas: (Default)
From: [personal profile] kondybas
Еще есть BSD-специфичній jot

Date: 2025-01-07 08:28 (UTC)
green_fr: (Default)
From: [personal profile] green_fr
На Винде это Get-Random - тоже от ИИ узнал :-)

Date: 2025-01-07 14:00 (UTC)
dmarck: (Default)
From: [personal profile] dmarck
... но только в павершелле

Date: 2025-01-07 08:40 (UTC)
kondybas: (Default)
From: [personal profile] kondybas
А вот кстате, всплівает что-то в мозжечке, будто бі в процах нінче есть аппаратніе ГСЧ, и /dev/random прям туда воткнут?

Date: 2025-01-07 13:26 (UTC)
henry_flower: A melancholy wolf (Default)
From: [personal profile] henry_flower
$ od -An -N3 -i /dev/urandom
      822634

Date: 2025-01-09 04:39 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Вот именно. А если хочется криптографически надёжно, то можно даже и без u.