Linux-Shell-实现随机数多种方法.doc

Linux-Shell-实现随机数多种方法.doc

ID:57662425

大小:39.50 KB

页数:5页

时间:2020-08-31

Linux-Shell-实现随机数多种方法.doc_第1页
Linux-Shell-实现随机数多种方法.doc_第2页
Linux-Shell-实现随机数多种方法.doc_第3页
Linux-Shell-实现随机数多种方法.doc_第4页
Linux-Shell-实现随机数多种方法.doc_第5页
资源描述:

《Linux-Shell-实现随机数多种方法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、LinuxShell实现随机数多种方法在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那还真的不简单了。现在很多都是操作系统内核会提供相应的api,这些原始参数是获取一些计算机运行原始信息,如内存,电压,物理信号等等,它的值在一个时间段可以保证是唯一的了。好了,废话我就不说了。呵呵。shell脚本程序我们有那些获得随机数方法呢?一、通过时间获得随机数(date)这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里

2、面获得同一时间的唯一值。适应所有程序里面了。例子:12345678910111213[chengmo@centos5 shell]$date+%s1287764773#获得时间戳,当前到:1970-01-0100:00:00相隔的秒数#如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。  [chengmo@centos5 shell]$date+%N738710457#获得当前时间的纳秒数据,精确到亿分之一秒。#这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出

3、现相同结果,不过不同时间里面还会有大量重复碰撞  [chengmo@centos5 shell]$date+%s%N1287764807051101270#这个可以说比较完美了,加入了时间戳,又加上了纳秒通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。12345678#!/bin/sh  #写个随机函数,调用方法randomminmax#在min与max直接获得随机整数#copyrightchengmoQQ:8292669    #获得随机数返回值,shell函数里算出随机

4、数后,更新该值91011121314151617181920212223242526functionrandom(){    min=$1;    max=$2-$1;    num=$(date+%s+%N);    ((retnum=num%max+min));    #进行求余数运算即可    echo$retnum;    #这里通过echo打印出来值,然后获得函数的,stdout就可以获得值    #还有一种返回,定义全价变量,然后函数改下内容,外面读取}  #得到1-10的seq数据项foriin{1

5、..10};do    out=$(random210000);    echo$i,"2-10000",$out;done;看看运行结果:[chengmo@centos5shell]$shtestrandom.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一个循环里面,得到值

6、各不相同。这个是我们常用方法,适应各种语言,是一个通用算法,就算服务器不提供,某时刻相同唯一数据标记,我们也可以通过这种方法,做自己的伪随机数。下面还有更简单方法呢,不要我们自己做了。2、通过内部系统变量($RANDOM)其实,linux已经提供有个系统环境变量了,直接就是随机数,哈哈,觉得刚学习方法,是不是白费了!!123456[chengmo@centos5shell]$echo$RANDOM10918[chengmo@centos5shell]$echo$RANDOM10001  #连续2次访问,结果不一样

7、,这个数据是一个小于或等于5位的整数可能有疑问了,如果超过5位的随机数怎么得到呢?呵呵,加个固定10位整数,然后进行求余,跟例1一样了。接下来的例子又是我们自立更生做了。3、通过系统内部唯一数据生成随机数(/dev/random,urandom)我们知道dev目录下面,是linux一些默认设备,它给我们感觉就是放的是键盘,硬盘,光驱等设备的对应文件了。其实linux有些设备很特殊,有特殊用途。前面我们说到的:/dev/[udp

8、tcp]/host/port比较特殊吧。呵呵,有扯远了。/dev/random设备,存

9、储着系统当前运行的环境的实时数据。它可以看作是系统某个时候,唯一值数据,因此可以用作随机数元数据。我们可以通过文件读取方式,读得里面数据。/dev/urandom这个设备数据与random里面一样。只是,它是非阻塞的随机数发生器,读取操作不会产生阻塞。实例:1234567891011121314[chengmo@centos5shell]$head-1/dev/urand

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。