如何在OpenWRT下生成随机数?


-2

使用“普通”(我的意思是完整的)Linux发行版,它运行得很好:

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

好的,等待大约0-9秒。

但在OpenWRT下[不使用bash,而是ash]:

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

为什么:

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

那么有没有人有办法在OpenWRT下生成随机数,所以我可以把它放到“睡眠”中?


灰不是bash; 你不能使用它的bash功能。
Ignacio Vazquez-Abrams

来自SO的@ user62367已经回复了你的问题
伟大的狼

1
说真的,停止交叉。
2011年

Answers:


3

Ash不明白,$[]并且在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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.