为了账号安全,请及时绑定邮箱和手机立即绑定

Bash脚本中某个范围的随机数

Bash脚本中某个范围的随机数

慕田峪4524236 2019-10-15 14:42:48
我需要2000-65000从shell脚本之间生成一个随机端口号。问题是$RANDOM15位数字,所以我被卡住了!PORT=$(($RANDOM%63000+2001)) 如果没有大小限制,它将很好地工作。有没有人举例说明我如何做到这一点,也许是通过从中提取某些东西/dev/urandom并使其处于一定范围内?
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

shuf -i 2000-65000 -n 1

请享用!


编辑:范围包括在内。


查看完整回答
反对 回复 2019-10-15
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

在Mac OS X和FreeBSD上,您也可以使用jot:


jot -r 1  2000 65000


查看完整回答
反对 回复 2019-10-15
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

根据bash手册页,$RANDOM分布在0和32767之间;也就是说,它是一个无符号的15位值。假设$RANDOM是均匀分布的,则可以如下创建一个均匀分布的无符号30位整数:


$(((RANDOM<<15)|RANDOM))

由于您的范围不是2的幂,因此简单的模运算几乎几乎可以为您提供均匀的分布,但是与您的情况一样,输入范围为30位,输出范围小于16位,这确实应该足够接近:


PORT=$(( ((RANDOM<<15)|RANDOM) % 63001 + 2000 ))


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1082 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信