С "нормальным" (я имею в виду полный) дистрибутив Linux, это работает просто великолепно:
sleep $(echo "$[ ($RANDOM % 10 ) ]")
Хорошо, это ожидает в течение приблизительно 0-9 секунд.
но под OpenWRT [не использование bash
, а скорее ash
]:
$ sleep $(echo "$[ ($RANDOM % 9 ) ]")
sleep: invalid number '$['
$
и почему:
$ echo "$[ ($RANDOM % 9 ) ]"
$[ ( % 9 ) ]
$
У кого-либо есть способ генерировать случайные числа под OpenWRT, таким образом, я могу поместить его в "сон"?
Вот (ненадежный) способ произвести целое число между 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)
Пепел не понимает $[]
и это удерживается от использования в Bash. Кроме того, echo
является ненужным. Используйте это вместо этого и для Bash и для Ash:
sleep $(( $RANDOM % 10 ))