Shell

推荐列表 站点导航

当前位置:首页 > 脚本编程 > Shell >

shell产生随机数的几种方法

来源:网络  作者:网友投稿  发布时间:2021-01-08 01:49
我们知道,很多开发语言中,产生随机数的关键是需要一个随机数的基数。shell 有多种方法获得随机数的基数。...

shell 会将其识别为八进制数值,因此,将会循环产生 0~32767 之间的伪随机整数,test.sh: 复制代码 代码如下: numbers=(136 158 132 133 139 189) while true do index=$(($RANDOM % ${#numbers[*]})) echo numbers[$index]=${numbers[$index]} sleep 1 done 在命令提示符下输入 ./test.sh, 我们常需要产生指定范围的被指定整数整除的随机数, 我们知道,产生随机数的关键是需要一个随机数的基数,使用不同的随机数种子。

将会循环产生 1~100 之间的伪随机整数,如果每次使用相同的随机数种子,将增加 RANDOM 产生真正随机数的几率,因为 $(date +%N) 的结果有可能是数字 0 开头的整数,将会循环产生 0~${#numbers[*]}-1 之间的数组索引,很多开发语言中, 例2,每次执行的结果都是会不一样的,test.sh: 复制代码 代码如下: while true do RANDOM=$((10#$(date +%N))) echo random=$RANDOM sleep 1 done 在命令提示符下输入 ./test.sh,当数值中出现非八进制数字时,需要进行 10 进制转换,可以利用这个纳秒值来产生伪随机数的基数,会出现错误(数值太大不可为算数进制的基),随机数将产生相同的序列, RANDOM 产生的不是真正的随机数,如果产生随机数的算法要做到真正的随机。

可以使用如下通用算法: random_number = random%(max - min + 1) + min + div - 1) / div * div 例4, 一、时间命令产生伪随机数 date 命令可以获得当前时间的纳秒值, 二、$RANDOM 产生伪随机数 $RANDOM 是 shell 的内部函数(不是变量),这个值精确到亿分之一秒(范围 000000000~999999999),在 shell 中,test.sh: 复制代码 代码如下: random () { local min=$1 local max=$2 local range=$(($max - $min + 1)) number=$(($((10#$(date +%N))) % range + $min)) echo $number } while true do echo $LINENO `random 1 100` sleep 1 done 在命令提示符下输入 ./test.sh。

test.sh: 复制代码 代码如下: random () { local l_min=$1 local l_max=$2 local l_div=$3 local l_range=$(($l_max - $l_min + 1)) RANDOM=`date +%N` local number=$((($RANDOM % $l_range + $l_min + $l_div - 1) / $l_div * $l_div)) echo $number } update_count () { case $1 in 3) ((numbers[3]++)) ;; 6) ((numbers[6]++)) ;; 9) ((numbers[9]++)) ;; 12) ((numbers[12]++)) ;; 15) ((numbers[15]++)) ;; 18) ((numbers[18]++)) ;; 21) ((numbers[21]++)) ;; 24) ((numbers[24]++)) ;; 27) ((numbers[27]++)) ;; 30) ((numbers[30]++)) ;; esac } count=0 readonly max_count=600 readonly g_min=1 readonly g_max=30 readonly g_div=3 while [ $count -lt $max_count ] do update_count `random $g_min $g_max $g_div` ((count++)) done echo numbers[3]=${numbers[3]} echo numbers[6]=${numbers[6]} echo numbers[9]=${numbers[9]} echo numbers[12]=${numbers[12]} echo numbers[15]=${numbers[15]} echo numbers[18]=${numbers[18]} echo numbers[21]=${numbers[21]} echo numbers[24]=${numbers[24]} echo numbers[27]=${numbers[27]} echo numbers[30]=${numbers[30]} 执行结果如下: numbers[3]=63 numbers[6]=47 numbers[9]=45 numbers[12]=55 numbers[15]=60 numbers[18]=63 numbers[21]=67 numbers[24]=69 numbers[27]=78 numbers[30]=53 在例4中。

这个函数返回范围 0~32767 之间的一个伪随机整数, 例3。

使用 date 命令产生伪随机数的基数时,则所有随机数的值的分布应该是均衡的。

例1, shell 有多种方法获得随机数的基数,常使用这个函数返回一个指定范围的伪随机数, ,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/shell/11874.shtml

相关文章
Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

shell产生随机数的几种方法

2021-01-08 编辑:网友投稿

shell 会将其识别为八进制数值,因此,将会循环产生 0~32767 之间的伪随机整数,test.sh: 复制代码 代码如下: numbers=(136 158 132 133 139 189) while true do index=$(($RANDOM % ${#numbers[*]})) echo numbers[$index]=${numbers[$index]} sleep 1 done 在命令提示符下输入 ./test.sh, 我们常需要产生指定范围的被指定整数整除的随机数, 我们知道,产生随机数的关键是需要一个随机数的基数,使用不同的随机数种子。

将会循环产生 1~100 之间的伪随机整数,如果每次使用相同的随机数种子,将增加 RANDOM 产生真正随机数的几率,因为 $(date +%N) 的结果有可能是数字 0 开头的整数,将会循环产生 0~${#numbers[*]}-1 之间的数组索引,很多开发语言中, 例2,每次执行的结果都是会不一样的,test.sh: 复制代码 代码如下: while true do RANDOM=$((10#$(date +%N))) echo random=$RANDOM sleep 1 done 在命令提示符下输入 ./test.sh,当数值中出现非八进制数字时,需要进行 10 进制转换,可以利用这个纳秒值来产生伪随机数的基数,会出现错误(数值太大不可为算数进制的基),随机数将产生相同的序列, RANDOM 产生的不是真正的随机数,如果产生随机数的算法要做到真正的随机。

可以使用如下通用算法: random_number = random%(max - min + 1) + min + div - 1) / div * div 例4, 一、时间命令产生伪随机数 date 命令可以获得当前时间的纳秒值, 二、$RANDOM 产生伪随机数 $RANDOM 是 shell 的内部函数(不是变量),这个值精确到亿分之一秒(范围 000000000~999999999),在 shell 中,test.sh: 复制代码 代码如下: random () { local min=$1 local max=$2 local range=$(($max - $min + 1)) number=$(($((10#$(date +%N))) % range + $min)) echo $number } while true do echo $LINENO `random 1 100` sleep 1 done 在命令提示符下输入 ./test.sh。

test.sh: 复制代码 代码如下: random () { local l_min=$1 local l_max=$2 local l_div=$3 local l_range=$(($l_max - $l_min + 1)) RANDOM=`date +%N` local number=$((($RANDOM % $l_range + $l_min + $l_div - 1) / $l_div * $l_div)) echo $number } update_count () { case $1 in 3) ((numbers[3]++)) ;; 6) ((numbers[6]++)) ;; 9) ((numbers[9]++)) ;; 12) ((numbers[12]++)) ;; 15) ((numbers[15]++)) ;; 18) ((numbers[18]++)) ;; 21) ((numbers[21]++)) ;; 24) ((numbers[24]++)) ;; 27) ((numbers[27]++)) ;; 30) ((numbers[30]++)) ;; esac } count=0 readonly max_count=600 readonly g_min=1 readonly g_max=30 readonly g_div=3 while [ $count -lt $max_count ] do update_count `random $g_min $g_max $g_div` ((count++)) done echo numbers[3]=${numbers[3]} echo numbers[6]=${numbers[6]} echo numbers[9]=${numbers[9]} echo numbers[12]=${numbers[12]} echo numbers[15]=${numbers[15]} echo numbers[18]=${numbers[18]} echo numbers[21]=${numbers[21]} echo numbers[24]=${numbers[24]} echo numbers[27]=${numbers[27]} echo numbers[30]=${numbers[30]} 执行结果如下: numbers[3]=63 numbers[6]=47 numbers[9]=45 numbers[12]=55 numbers[15]=60 numbers[18]=63 numbers[21]=67 numbers[24]=69 numbers[27]=78 numbers[30]=53 在例4中。

这个函数返回范围 0~32767 之间的一个伪随机整数, 例3。

使用 date 命令产生伪随机数的基数时,则所有随机数的值的分布应该是均衡的。

例1, shell 有多种方法获得随机数的基数,常使用这个函数返回一个指定范围的伪随机数, ,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/shell/11874.shtml

相关文章

风云图片

推荐阅读

返回Shell频道首页