我需要一个命令行脚本来生成 1 到 6 之间的随机整数。我使用 Ubuntu 和 bash。
几个月前我正在使用“bc”来解决这个问题,但从未让它完全工作。从那时起我就忘记了我去了哪里。
我用它来更改 crontab 脚本,以便它不会总是每 15 分钟运行一次,而是随机运行一次(15+-3 分钟)。 IE。将 crontab 更改为每 12 分钟一次,然后在运行脚本之前在脚本中休眠 1-6 分钟(这基本上是一个用于检查网页状态的 wget)。
答案1
见人猛击,参数部分,外壳变量小节:
RANDOM Each time this parameter is referenced, a random integer between 0 and 32767 is generated. The sequence of random numbers may be initialized by assigning a value to RANDOM. If RANDOM is unset, it loses its special properties, even if it is subsequently reset.
要将值限制为 1..6 间隔,请使用表达式$((RANDOM%6+1))
。 1
或者您可以/dev/urandom
按如下方式使用:
tr -dc '1-6' < /dev/urandom | head -c 1
答案2
我可以提出一个自定义线性同余随机生成器或 X(n+1) = (343*X(n) ) % M17 其中,M17= 2^17 - 1 = 131071 是梅森素数 (p=17)。伪随机序列均匀分布,范围为 [0,131070],那么您可以将范围限制为 [1,6[,如下所示: Z6 = 6*X(n)/M17 + 1
示例代码:
#!/bin/bash
M=6 #change this if you need different ranges
let "z=(343*10#`date +%N`)%131071"
let "z=$M*z/131071+1"
echo $z
这是一个一次性随机生成器。如果您需要随机序列,则种子10#date +%N
应仅使用一次来启动,并且生成器应在循环中使用。在 Ubuntu 12.04 LTS 上测试。玩得开心!