-2

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

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

ОК, он ждет около 0-9 секунд.

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

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

и почему:

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

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

2 ответа2

3

Эш не понимает $[] и в Bash он устарел. Также echo не нужно. Используйте это вместо Bash и Ash:

sleep $(( $RANDOM % 10 ))
-1

Вот (ненадежный) способ получить целое число от 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .