慕田峪4524236
2019-10-15 14:42:48
我需要2000-65000從shell腳本之間生成一個(gè)隨機(jī)端口號(hào)。問(wèn)題是$RANDOM15位數(shù)字,所以我被卡住了!PORT=$(($RANDOM%63000+2001)) 如果沒(méi)有大小限制,它將很好地工作。有沒(méi)有人舉例說(shuō)明我如何做到這一點(diǎn),也許是通過(guò)從中提取某些東西/dev/urandom并使其處于一定范圍內(nèi)?
3 回答

斯蒂芬大帝
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
根據(jù)bash手冊(cè)頁(yè),$RANDOM分布在0和32767之間;也就是說(shuō),它是一個(gè)無(wú)符號(hào)的15位值。假設(shè)$RANDOM是均勻分布的,則可以如下創(chuàng)建一個(gè)均勻分布的無(wú)符號(hào)30位整數(shù):
$(((RANDOM<<15)|RANDOM))
由于您的范圍不是2的冪,因此簡(jiǎn)單的模運(yùn)算幾乎幾乎可以為您提供均勻的分布,但是與您的情況一樣,輸入范圍為30位,輸出范圍小于16位,這確實(shí)應(yīng)該足夠接近:
PORT=$(( ((RANDOM<<15)|RANDOM) % 63001 + 2000 ))
添加回答
舉報(bào)
0/150
提交
取消