我需要从一个shell脚本生成一个2000-65000之间的随机端口号。问题是$RANDOM是一个15位的数字,所以我被卡住了!
如果没有大小限制,PORT=$(($RANDOM%63000+2001))将很好地工作。
有没有人有一个例子,我可以这样做,也许从/dev/urandom提取一些东西,并得到它在一个范围内?
我需要从一个shell脚本生成一个2000-65000之间的随机端口号。问题是$RANDOM是一个15位的数字,所以我被卡住了!
如果没有大小限制,PORT=$(($RANDOM%63000+2001))将很好地工作。
有没有人有一个例子,我可以这样做,也许从/dev/urandom提取一些东西,并得到它在一个范围内?
当前回答
这是另一个。我原以为它对任何东西都适用,但我工作时的centos盒子上没有sort的随机选项。
seq 2000 65000 | sort -R | head -n 1
其他回答
你可以这样做
cat /dev/urandom|od -N2 -An -i|awk -v f=2000 -v r=65000 '{printf "%i\n", f + r * $1 / 65536}'
如果需要更多详细信息,请参阅Shell脚本随机数生成器。
ruby也是一样:
echo $(ruby -e 'puts rand(20..65)') #=> 65 (inclusive ending)
echo $(ruby -e 'puts rand(20...65)') #=> 37 (exclusive ending)
你可以通过urandom得到随机数
Head -200 /dev/urandom | cksum
输出:
3310670062 52870
检索上述数字的一部分。
Head -200 /dev/urandom | cksum | cut -f1 -d " "
那么输出是
3310670062
为了满足您的要求,
Head -200 /dev/urandom |cksum | cut -f1 -d " " | awk '{print $1%63000+2001}'
shuf -i 2000-65000 -n 1
享受吧!
编辑:范围是包括在内的。
或在OS-X以下工作为我:
$ gsort --random-sort