如何在shell中生成9位随机数?
我正在尝试类似的方法,但它只给出了低于 32768 的数字。
#!/bin/bash
mo=$((RANDOM%999999999))
echo "********Random"$mo
请帮忙
输出应该是
********Random453351111
在 Linux 中使用
/dev/urandom
:
$ rnd=$(tr -cd "[:digit:]" < /dev/urandom | head -c 9) && echo $rnd
463559879
我想这应该可以
shuf -i 99999999-999999999 -n 1
由于 RANDOM 的范围有限,它一次只能用于检索 4 个以 10 为基数的数字。因此,要检索 9 位数字,您需要调用它 3 次。
如果我们不太关心性能(愿意支付流程替代成本),这可能看起来像:
#!/usr/bin/env bash
get4() {
local newVal=32768
while (( newVal > 29999 )); do # avoid bias because of remainder
newVal=$RANDOM
done
printf '%04d' "$((newVal % 10000))"
}
result="$(get4)$(get4)$(get4)"
result=$(( result % 1000000000 ))
printf '%09d\n' "$result"
如果我们确实关心性能,它可能会看起来像:
#!/usr/bin/env bash
get4() {
local newVal=32768 outVar=$1
while (( newVal > 29999 )); do # avoid bias because of remainder
newVal=$RANDOM
done
printf -v "$outVar" '%04d' "$((newVal % 10000))"
}
get4 out1; get4 out2; get4 out3
result="${out1}${out2}${out3}"
result=$(( result % 1000000000 ))
printf '%09d\n' "$result"
使用perl,如下:
perl -e print\ rand | cut -c 3-11
或者
perl -MPOSIX -e 'print floor rand 10**9'
如果存在(bash >= 5.1 或 khs93),则使用变量 SRANDOM,如果不存在,则使用 RANDOM 生成 10 个数字长度的数字。完全内置。
rand10()
{
xrand=""
for xc in {1..4}
do
x=$(printf '%04d' $(( RANDOM % 10000 )) )
xrand=$xrand${x:0:3}
done
echo "${xrand:0:10}"
}
[ "$SRANDOM" = "" ] && SRANDOM=$(rand10)
printf '%09d\n' $(( SRANDOM % 1000000000 ))