Shell进阶脚本-生成随机数( $RANDOM )

Shell进阶脚本-生成随机数( $RANDOM ),第1张

$RANDOM 是 Bash 中用来生成 0 至 32767 之间随机整数的一个内置 函数(而非常量)

不应 被用于生成密钥

样例-1. 生成随机数

样例-2. 从牌组中随机选牌

样咧-3. 模拟布朗运动

Jipe 提供了一些生成指定范围内随机数的方法

Bill Gradwohl 提出了一种改良后的仅适用于正数的公式

Bill 在这还给出了一个生成指定范围内随机数的通用函数

样例-4. 指定范围随机数

那么 $RANDOM 到底有多随机?最好的测试方法就是写一个脚本跟踪由 $RANDOM 生成的随机数的分布

接下来让我们多投几次由 $RANDOM 做的骰子

样例-5. 用 RANDOM 投骰子

从上一个样例中我们可以发现,在每次调用 RANDOM 生成器时,最好利用重置生成器种子

在 RANDOM 生成器中使用相同的种子会生成相同序列的随机数。(与 C 语言中的 random() 函数的行为一致)

样例-6. 重置 RANDOM 种子

伪设备文件 /dev/urandom 提供了比 $RANDOM 变量更随机化的伪随机数。命令 dd if=/dev/urandom of=targetfile bs=1 count=XXX 将会创建一个包含均匀分布的伪随机数的文件。但是想要在脚本中将这些随机数赋值给变量需要做一些变通,比如使用命令 od 或者使用管道导入命令 md5sum

当然也有其他在脚本中生成伪随机数的方法

比如: Awk 命令就提供了这样一种非常简易的方法

样例-7. 使用 awk 命令生成伪随机数

同样,命令 date 可以用于 生成整型随机数序列

totalline=`wc -l file|awk '{print $1}'`

i=`date +%s%N | cut -c19-19`

j=0

#每10行随机取1行

while [ $i -lt $totalline ]do

k=`date +%s%N | cut -c19-19`

sed -n "${i}p" file >>newfile

j=`expr $j + 10`

i=`expr $k + $j`

done


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/7976978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存