Linux_Shell_实现随机数多种方法.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux_Shell_实现随机数多种方法

Linux Shell 实现随机数多种方法 在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那 还真的不简单了。现在很多都是操作系统内核会提供相应的api,这些原始参数是获取一些计算机运行原始信息,如内存,电压,物理信号等等,它的值在一个时 间段可以保证是唯一的了。好了,废话我就不说了。呵呵。 shell脚本程序我们有那些获得随机数方法呢? 一、通过时间获得随机数(date) 这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。 例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 [chengmo@centos5? shell]$ date +%s 1287764773 #获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数 #如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。 ?? [chengmo@centos5? shell]$ date +%N 738710457 #获得当前时间的纳秒数据,精确到亿分之一秒。 #这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞 ?? [chengmo@centos5? shell]$ date +%s%N 1287764807051101270 #这个可以说比较完美了,加入了时间戳,又加上了纳秒 通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/bin/sh ?? #写个随机函数,调用方法random min max #在min 与 max直接获得随机整数 #copyright chengmo QQ:8292669 ?? ?? #获得随机数返回值,shell函数里算出随机数后,更新该值 function random() { ????min=$1; ????max=$2-$1; ????num=$(date +%s+%N); ????((retnum=num%max+min)); ????#进行求余数运算即可 ????echo $retnum; ????#这里通过echo 打印出来值,然后获得函数的,stdout就可以获得值 ????#还有一种返回,定义全价变量,然后函数改下内容,外面读取 } ?? #得到1-10的seq数据项 for i in {1..10}; do ????out=$(random 2 10000); ????echo $i,2-10000,$out; done; 看看运行结果: [chengmo@centos5 shell]$ sh testrandom.sh 1,2-10000,5600 2,2-10000,5295 3,2-10000,3432 4,2-10000,3148 5,2-10000,9041 6,2-10000,4290 7,2-10000,2380 8,2-10000,9009 9,2-10000,5474 10,2-10000,3664 一个循环里面,得到值各不相同。 这个是我们常用方法,适应各种语言,是一个通用算法,就算服务器不提供,某时刻相同唯一数据标记,我们也可以通过这种方法,做自己的伪随机数。下面还有更简单方法呢,不要我们自己做了。 2、通过内部系统变量($RANDOM) 其实,linux已经提供有个系统环境变量了,直接就是随机数,哈哈,觉得刚学习方法,是不是白费了!! 1 2 3 4 5 6 [chengmo@centos5 shell]$ echo $RANDOM 10918 [chengmo@centos5 shell]$ echo $RANDOM 10001 ?? #连续2次访问,结果不一样,这个数据是一个小于或等于5位的整数 可能有疑问了,如果超过5位的随机数怎么得到呢? 呵呵,加个固定10位整数,然后进行求余,跟例1 一样了。接下来的例子又是我们自立更生做了。 3、通过系统内部唯一数据生成随机数(/dev/random,urandom) 我们知道dev目录下面,是linux一些默认设备,它给我们感觉就是放的是键盘,硬盘,光驱等设备的对应文件了。 其实linux有些设备很特殊,有特殊用途。前面我们说到的:/dev/[udp|tcp]/host/port比较特殊吧。呵呵,有扯远了。 /dev/random设备,存储着系统当前运行的环境的实时数据。它可以看作是系统某

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档