Самое простое решение - использовать инструмент, который позволяет вам напрямую указывать диапазоны, например gnushuf
shuf -i1-10 -n1
Если вы хотите использовать $RANDOM, было бы точнее выкинуть последние 8 чисел в 0... 32767 и просто обработать его как 0... 32759, так как принимать 0... 32767 mod 10 вы получаете следующее распределение
0-8 each: 3277
8-9 each: 3276
Итак, немного медленнее, но точнее будет
while :; do ran=$RANDOM; ((ran < 32760)) && echo $(((ran%10)+1)) && break; done
Ответ 3
Чтобы генерировать случайные числа с помощью bash, используйте внутреннюю функцию . Обратите внимание, что $RANDOM не следует использовать для генерации ключа шифрования. $RANDOM генерируется с использованием вашего текущего идентификатора процесса (PID) и текущего времени/даты, определяемого количеством секунд, прошедших с 1970 года.
echo $RANDOM % 10 + 1 | bc
Ответ 4
Вы также можете использовать /dev/urandom:
grep -m1 -ao '[0-9]' /dev/urandom | sed s/0/10/ | head -n1
Ответ 5
Сгенерировать в диапазоне: {0,.., 9}
r=$(( $RANDOM % 10 )); echo $r
Чтобы создать в диапазоне: {40,.., 49}
r=$(( $RANDOM % 10 + 40 )); echo $r
Ответ 6
Вот пример псевдослучайного генератора, когда не доступно $RANDOM и /dev/urandom