我需要2000-65000从shell脚本之间生成一个随机端口号。问题是$RANDOM15位数字,所以我被卡住了!PORT=$(($RANDOM%63000+2001)) 如果没有大小限制,它将很好地工作。有没有人举例说明我如何做到这一点,也许是通过从中提取某些东西/dev/urandom并使其处于一定范围内?
3 回答
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
根据bash手册页,$RANDOM分布在0和32767之间;也就是说,它是一个无符号的15位值。假设$RANDOM是均匀分布的,则可以如下创建一个均匀分布的无符号30位整数:
$(((RANDOM<<15)|RANDOM))
由于您的范围不是2的幂,因此简单的模运算几乎几乎可以为您提供均匀的分布,但是与您的情况一样,输入范围为30位,输出范围小于16位,这确实应该足够接近:
PORT=$(( ((RANDOM<<15)|RANDOM) % 63001 + 2000 ))
- 3 回答
- 0 关注
- 1082 浏览
添加回答
举报
0/150
提交
取消