我需要从一个shell脚本生成一个2000-65000之间的随机端口号。问题是$RANDOM是一个15位的数字,所以我被卡住了!
如果没有大小限制,PORT=$(($RANDOM%63000+2001))将很好地工作。
有没有人有一个例子,我可以这样做,也许从/dev/urandom提取一些东西,并得到它在一个范围内?
我需要从一个shell脚本生成一个2000-65000之间的随机端口号。问题是$RANDOM是一个15位的数字,所以我被卡住了!
如果没有大小限制,PORT=$(($RANDOM%63000+2001))将很好地工作。
有没有人有一个例子,我可以这样做,也许从/dev/urandom提取一些东西,并得到它在一个范围内?
当前回答
shuf -i 2000-65000 -n 1
享受吧!
编辑:范围是包括在内的。
其他回答
在Mac OS X和FreeBSD上,你也可以使用jot:
jot -r 1 2000 65000
你可以这样做
cat /dev/urandom|od -N2 -An -i|awk -v f=2000 -v r=65000 '{printf "%i\n", f + r * $1 / 65536}'
如果需要更多详细信息,请参阅Shell脚本随机数生成器。
如果您不是bash专家,并希望将此转换为基于linux的bash脚本中的变量,请尝试以下方法:
VAR=$(shuf -i 200-700 -n 1)
这样算上VAR,你的投资范围在200到700美元之间。
我能想到的最简单的方法是perl一行代码:
perl -e 'print int(rand(65000-2000)) + 2000'
你可以用两个数字:
PORT=$(($RANDOM + ($RANDOM % 2) * 32768))
你还是得在你的范围内。这不是一般的n位随机数方法,但它适用于您的情况,并且都在bash中。
如果你想非常可爱地阅读/dev/urandom,你可以这样做:
od -A n -N 2 -t u2 /dev/urandom
它会读取两个字节,并将它们作为unsigned int输出;你还是得剪。
或在OS-X以下工作为我:
$ gsort --random-sort