使用shell腳本,我希望生成五個文件,並且我希望在每個文件中放置從50000到150000的不同隨機數範圍。我試過類似以下的東西,如何在shell腳本中使用隨機數字?
for i in 01 02 03 04 05; do
A=$((50000+100000))
B=$(($B%$A))
cat > ${i}.dat << EOF
AArandom=$A
EOF
done
但是這不起作用....我怎樣才能使隨機數字和打印出每個文件?
使用shell腳本,我希望生成五個文件,並且我希望在每個文件中放置從50000到150000的不同隨機數範圍。我試過類似以下的東西,如何在shell腳本中使用隨機數字?
for i in 01 02 03 04 05; do
A=$((50000+100000))
B=$(($B%$A))
cat > ${i}.dat << EOF
AArandom=$A
EOF
done
但是這不起作用....我怎樣才能使隨機數字和打印出每個文件?
每次讀取變量$RANDOM
的值時, 它給你 是0和32767這樣不給你足夠的範圍在0和2^15 - 1
之間的隨機數。 您可以使用兩個$RANDOM
作爲基數15的兩位數字, ,然後採用適當的模數並應用適當的範圍歸一化。
這裏是包裹在一個函數的邏輯:
randrange() {
min=$1
max=$2
((range = max - min))
((maxrand = 2**30))
((limit = maxrand - maxrand % range))
while true; do
((r = RANDOM * 2**15 + RANDOM))
((r < limit)) && break
done
((num = min + r % range))
echo $num
}
然後你就可以在這樣的循環生成文件:
for i in 01 02 03 04 05; do
echo "AArandom=$(randrange 50000 150000)" > $i.dat
done
注意存在的randrange
執行情況的警告: 如果數值有偏差,有一個重新滾動的循環,但理論上這可能會阻止函數終止。 實際上,這是不太可能的,但值得一提。
@Steve沒有重複,因爲範圍要求:'$ RANDOM'產生號碼'0的範圍內 - 32767',但在這裏,一個更大的範圍需要。 – janos
如果你想在bash中做些什麼,「man bash」往往是一個很好的開始。手冊頁很長;搜索關鍵字,就像'隨機'... –
我認爲這個問題應該重寫,以明確注意範圍> 32767的要求。 –