Как генерировать случайные числа под OpenWRT?

С "нормальным" (я имею в виду полный) дистрибутив Linux, это работает просто великолепно:

sleep $(echo "$[ ($RANDOM % 10 ) ]")

Хорошо, это ожидает в течение приблизительно 0-9 секунд.

но под OpenWRT [не использование bash, а скорее ash]:

$ sleep $(echo "$[ ($RANDOM % 9 ) ]")
sleep: invalid number '$['
$

и почему:

$ echo "$[ ($RANDOM % 9 ) ]"
$[ ( % 9 ) ]
$ 

У кого-либо есть способ генерировать случайные числа под OpenWRT, таким образом, я могу поместить его в "сон"?

-2
задан 29.10.2015, 08:10

2 ответа

Вот (ненадежный) способ произвести целое число между 0 и 9 (включительно):

sleep $(head -30 /dev/urandom | tr -dc "0123456789" | head -c1)

Это читает 30 строк из /dev/urandom, использование tr отбрасывать все символы, которые не являются цифрами и затем захватывают только первый символ остающихся цифр. Это ненадежно, поскольку существует возможность (с очень низкой вероятностью) это /dev/urandom приведет к 30 строкам, которые, оказывается, не содержат цифр.

Это может быть расширено для генерации трехзначного числа (в диапазоне 0-999) следующим образом:

$(head -30 /dev/urandom | tr -dc "0123456789" | head -c3)
-1
ответ дан 27.11.2019, 23:35

Пепел не понимает $[] и это удерживается от использования в Bash. Кроме того, echo является ненужным. Используйте это вместо этого и для Bash и для Ash:

sleep $(( $RANDOM % 10 ))
4
ответ дан 27.11.2019, 23:35

Теги

Похожие вопросы