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

我需要2000-65000从shell脚本之间生成一个随机端口号。问题是$RANDOM15位数字,所以我被卡住了!


PORT=$(($RANDOM%63000+2001)) 如果没有大小限制,它将很好地工作。


有没有人举例说明我如何做到这一点,也许是通过从中提取某些东西/dev/urandom并使其处于一定范围内?


慕田峪4524236
浏览 1083回答 3
3回答

一只名叫tom的猫

shuf -i 2000-65000 -n 1请享用!编辑:范围包括在内。

回首忆惘然

在Mac OS X和FreeBSD上,您也可以使用jot:jot -r 1  2000 65000

斯蒂芬大帝

根据bash手册页,$RANDOM分布在0和32767之间;也就是说,它是一个无符号的15位值。假设$RANDOM是均匀分布的,则可以如下创建一个均匀分布的无符号30位整数:$(((RANDOM<<15)|RANDOM))由于您的范围不是2的幂,因此简单的模运算几乎几乎可以为您提供均匀的分布,但是与您的情况一样,输入范围为30位,输出范围小于16位,这确实应该足够接近:PORT=$(( ((RANDOM<<15)|RANDOM) % 63001 + 2000 ))
打开App,查看更多内容
随时随地看视频慕课网APP