广告
返回顶部
首页 > 资讯 > 精选 >Shell脚本中怎么实现随机数
  • 899
分享到

Shell脚本中怎么实现随机数

2023-06-09 19:06:37 899人浏览 薄情痞子
摘要

shell脚本中怎么实现随机数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、通过时间获得随机数(date)这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里

shell脚本中怎么实现随机数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、通过时间获得随机数(date)

这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。

例子:

代码如下:


[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
#这个可以说比较完美了,加入了时间戳,又加上了纳秒

通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。

代码如下:


#!/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已经提供有个系统环境变量了,直接就是随机数,哈哈,觉得刚学习方法,是不是白费了!!

代码如下:


[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设备,存储着系统当前运行的环境的实时数据。它可以看作是系统某个时候,唯一值数据,因此可以用作随机数元数据。我们可以通过文件读取方式,读得里面数据。/dev/urandom这个设备数据与random里面一样。只是,它是非阻塞的随机数发生器,读取操作不会产生阻塞。

实例:

代码如下:


[chengmo@centos5  shell]$ head -1 /dev/urandom
ãņù…•KTþçanVÕã¹Û&¡õ¾“ô2íùU“ žF¦_ ÿ”†mEðûUráÏ=J&Macr;TŸA•ÌAÚRtÓ
 
#读一行,怎么是乱码呢?其实它是通过二进制数据保存实时数据的,那么我们怎么样把它变成整型数据呢?
 
 
[chengmo@centos5 ~/shell]$ head -200 /dev/urandom | cksum
1615228479 50333
#由于urandom的数据是非常多,不能直接通过cat读取,这里取前200行,其实整个数据都是变化的,取多少也一样是唯一的。
#cksum 将读取文件内容,生成唯一的表示整型数据,只有文件内容不变,生成结果就不会变化,与PHP crc函数
 
[chengmo@centos5  shell]$ head -200 /dev/urandom | cksum | cut -f1 -d" "
484750180
#cut 以” “分割,然后得到分割的第一个字段数据

得到整型数据,然后,类似一的方法就可以获得到随机数了。 题外话:在程序里面,我们经常md5得到唯一值,然后是字符串的,如果想表示成整型方式,可以通过crc函数.crc是循环冗余校验,相同数据通过运算,都会得到一串整型数据。现在这种验证应用很广。详细要了解,可以参考:crc.

下面还有个方法,直接从设备读取生成好的uuid码。

4、读取linux 的uuid码

在提到这个之前,有个概念,就是什么是uuid呢?

UUID码全称是通用唯一识别码 (Universally Unique Identifier, UUID),它 是一个软件建构的标准,亦为自由软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。

UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。它会让网络任何一台计算机所生成的uuid码,都是互联网整个服务器网络中唯一的。它的原信息会加入硬件,时间,机器当前运行信息等等。

UUID格式是:包含32个16进位数字,以“-”连接号分为五段,形式为8-4-4-4-12的32个字符。范例;550e8400-e29b-41d4-a716-446655440000  ,所以:UUID理论上的总数为216 x 8=2128,约等于3.4 x 1038。 也就是说若每奈秒产生1兆个UUID,要花100亿年才会将所有UUID用完。

其实,大家做数据库设计时候,肯定听说过,guid(全局唯一标识符)码,它其实是与uuid类似,由微软支持。 这里编码,基本有操作系统内核产生。大家记得把,在windows里面,无论数据库,还是其它软件,很容易得到这个uuid编码。

linux 的uuid码

linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内。其实,random目录,里面还有很多其它文件,都与生成uuid有关系的。

代码如下:


[chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid
dff68213-b700-4947-87b1-d9e640334196
[chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid
7b57209a-d285-4fd0-88b4-9d3162d2e1bc
#连续2次读取,得到的uuid是不同的
 
[chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "
2141807556
#同上方法得到随机整数

看完上述内容,你们掌握Shell脚本中怎么实现随机数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Shell脚本中怎么实现随机数

本文链接: https://www.lsjlt.com/news/257324.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Shell脚本中怎么实现随机数
    Shell脚本中怎么实现随机数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、通过时间获得随机数(date)这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里...
    99+
    2023-06-09
  • Shell脚本怎样生成随机密码
    这篇文章主要为大家展示了“Shell脚本怎样生成随机密码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Shell脚本怎样生成随机密码”这篇文章吧。生成随机密码(urandom版本)  #!/bi...
    99+
    2023-06-05
  • Shell脚本实现随机数多种方法介绍(date、random、uuid)
    在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那还真的不简单了。现在很多都是操作系统内核会提供相应的api,这些原始...
    99+
    2022-06-04
    随机数 脚本 多种
  • shell脚本实现随机生成10个8位密码
    随机生成10个8位密码shell脚本 1.首位大写字母 2.中间六位大小写字母数字随机混合 3.第八位[0-9] #!/bin.bash for i in {1..10} do A=`head -c 5...
    99+
    2022-06-04
    脚本 密码 shell
  • shell脚本怎么实现猜数游戏
    这篇文章主要介绍shell脚本怎么实现猜数游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用shell脚本写一个猜数游戏最近用shell写的一个猜数游戏,包括4个不同难度,脚本如下:#作者:p_小王echo&nbs...
    99+
    2023-06-09
  • shell中怎么产生随机数
    这篇文章主要介绍了shell中怎么产生随机数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、问题Shell下有时需要使用随机数,在此总结产生随机数的方法。计算机产生的的只是...
    99+
    2023-06-09
  • 怎么在Shell脚本中实现一个ftok函数
    怎么在Shell脚本中实现一个ftok函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。#!/bin/shlet key=0function ftok(...
    99+
    2023-06-09
  • Shell脚本实现ftok函数
    “古老的 Sys IPC 仍然有好几种有效的用途。三种 IPC 对象是共享内存,信号灯和消息。”当使用到 IPC 的这些对象时,你需要为每个对象创建一个 Key。虽然理论上来说我们在定义一个 IPC Key...
    99+
    2022-06-04
    脚本 函数 Shell
  • 详解Linux Shell 实现一个获取任意位数的随机密码的脚本
    Shell 命令行,实现一个获取任意位数的随机密码的脚本 每次我们想要获得一个密码的时候都很头疼,于是我之前自己用nodejs写了一个 Shell 脚本。这两天在学习 bash Shell 所以,想用同样的...
    99+
    2022-06-04
    位数 详解 脚本
  • linux中shell脚本实现下载完关机
    用mint 有一段时间了,下载基本用firefox,有时下载几个G的游戏。可是firefox没有找到下载完关机的选择。处于这个原因,写了这个。 download_shutdown.sh #!/bin/b...
    99+
    2022-06-04
    脚本 下载完 linux
  • Shell脚本中怎么获取本机ip地址
    这期内容当中小编将会给大家带来有关Shell脚本中怎么获取本机ip地址,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。方法一:代码如下:/sbin/ifconfig -a|grep inet|grep -v...
    99+
    2023-06-09
  • shell脚本实现猜数游戏
    用shell脚本写一个猜数游戏 最近用shell写的一个猜数游戏,包括4个不同难度,脚本如下: #作者:p_小王 echo '欢迎来到猜数游戏!' while true do read -p '开始/退出(y/n...
    99+
    2022-06-04
    shell 猜数
  • 怎么在Shell脚本中实现Expect免交互
    本篇文章给大家分享的是有关怎么在Shell脚本中实现Expect免交互,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Expext概述Expect是建立在tcl基础上的一个工具,...
    99+
    2023-06-09
  • 怎么用shell脚本实现ssh登录
    要使用shell脚本实现SSH登录,你可以使用SSH命令行工具,并将其包含在shell脚本中。以下是一个简单的示例:```bash#...
    99+
    2023-10-12
    shell ssh
  • Shell脚本中实现更新PHP5
    我很迷恋 Shell,很喜欢看着字符在黑色的 Console 界面中跳跃着,奇怪的是,我居然没有因此成为一个 Linux/Unix 程序员,而只是个写 CGI 程序的倒霉蛋。大家都是怎么称呼 “PHP 程序...
    99+
    2022-06-04
    脚本 Shell
  • Shell脚本实现猜数字游戏
    本文实例为大家分享了Shell实现猜数字游戏的具体代码,供大家参考,具体内容如下 这里的guem可以随便写,比如A、B之类的也可以 vim guem.sh 编辑脚本 #!/bin/bash init() { e...
    99+
    2022-06-04
    Shell 猜数字
  • ubuntu中怎么传参数到shell脚本
    本文小编为大家详细介绍“ubuntu中怎么传参数到shell脚本”,内容详细,步骤清晰,细节处理妥当,希望这篇“ubuntu中怎么传参数到shell脚本”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。ubuntu传...
    99+
    2023-07-04
  • Shell脚本中的函数怎么使用
    本篇内容介绍了“Shell脚本中的函数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Shell脚本中的功能是什么?函数是一组命令,这...
    99+
    2023-06-04
  • shell脚本中sed怎么用
    这篇文章主要介绍了shell脚本中sed怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。...
    99+
    2023-06-09
  • linux中shell脚本如何实现下载完关机
    本篇内容主要讲解“linux中shell脚本如何实现下载完关机”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux中shell脚本如何实现下载完关机”吧!download_shutdown....
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作