Получение случайного числа 0…255 в bash

Понадобилось получить случайное число в шеле из устройства /dev/urandom, написал небольшую функцию, сохраню у себя, чтобы не потерялась.

getrand() {
    head -c1 /dev/urandom | hexdump -d | sed -E '1!d;s/.+ +0+//'
}

Ещё вариант придумался (но необходим openssl):

getrand() {
    openssl rand 1 -hex | xargs -I. printf "%d" 0x.
}
Поделиться
Отправить
4 комментария
Дучик (doochik.ya.ru)

В bash еще есть переменная $RANDOM, но берется она, вроде, из /dev/random
Можно вот так сделать echo «$RANDOM%256» | bc

Евгений Степанищев (bolknote.ru)

Комментарий для doochik.ya.ru:

Да, я знаю о её существовании:
http://bolknote.ru/all/3831/
http://bolknote.ru/all/3410/

Вот так проще: echo $(( $RANDOM*255/32768 ))

Но мне нужны были именно случайные числа, а про $RANDOM написано ( http://tldp.org/LDP/abs/html/randomvar.html ):

$RANDOM is an internal Bash function (not a constant) that returns a pseudorandom integer in the range 0 — 32767. It should not be used to generate an encryption key.

Вася

Комментарий для Евгения Степанищева:

Случайных чисел не добьёшься, компьютер жестко ограниен логикой.

Евгений Степанищев (bolknote.ru)

Комментарий для Вася:

Почитайте как устройство /dev/random работает:  http://ru.wikipedia.org/wiki//dev/random

Популярное