- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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.sh1,2-10000,56002,2-10000,52953,2-10000,34324,2-10000,31485,2-10000,90416,2-10000,42907,2-10000,23808,2-10000,90099,2-10000,547410,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设备,存储着系统当前运行的环境的实时数据。它可以看作是系统某
您可能关注的文档
最近下载
- 新概念青少版2BUnit22 I always behave myself课件.pptx
- 院前急救培训手册.docx
- 消防设施操作员中级(四级)维保方向35个抽考项-PDF版.pdf VIP
- 人教版四年级数学《上册全册》全套精品教学课件小学优秀课堂课件.pptx VIP
- 2024年华医网继续教育临床静脉用药质量管理与风险防范答案.docx VIP
- 2023年河北高中学业水平合格性考试英语试卷真题(含答案详解).pdf
- 人教版一年级上册数学 加减混合(课件).pptx
- 海兰天澄 HLT-100COD在线分析仪使用说明书.doc
- 广东省深圳市育才一中学2024届中考物理适应性模拟试题含解析.doc
- 地方政府与城投企业债务风险研究报告——江苏篇(下)-15页.doc VIP
文档评论(0)