shell脚本获取随机数random

用C提供的取随机数的方法srand和rand,
前者是给后者设置随机数种子seed。

int rnd_num = 0;
srand(seed); // time(NULL) 通常使用时间做种子
rnd_num = rand(); // 产生随机数

产生种子的方法:

1. 使用日期时间

时间作为种子很简单,取当前日期和时间,但是存在一个陷阱:当多台机器并发执行产生随机数时,出现相同随机数的概率非常高。不推荐这种方式

2. 使用$RANDOM

需要系统支持,通过echo来检测, 打印出一个随机数字,证明当前环境支持$RANDOM,反之为空不支持:

[email protected]:~$ echo $RANDOM
2517

3. 使用/dev/urandom + tr

tr -cd 0-9 </dev/urandom | head -c 8  // 取8位随机种子

取完种子后使用awk来生成随机数,这里是一个简单的函数rnd2, 参数$1和$2分别是生成随机数的范围


#$1 $2 是取值范围
function rnd2() {
if [ -z "$RANDOM" ] ; then
SEED=`tr -cd 0-9 </dev/urandom | head -c 8`
else
SEED=$RANDOM
fi

RND_NUM=`echo $SEED $1 $2|awk ‘{srand($1);printf "%d",rand()*10000%($3-$2)+$2}‘`
echo $RND_NUM
}

写了个循环,循环30次,执行后得到结果如下图:

shell脚本获取随机数random

时间: 2024-10-22 16:41:21

shell脚本获取随机数random的相关文章

shell脚本获取随机数

$RANDOM系统变量 在bash中,支持$RANDOM系统变量,范围是 [0, 32767] #!/bin/bash set -e randN() { local N=$1 echo $(($RANDOM%$N)) } while [ true ]; do echo `randN 100` sleep 1s done 我在树莓派上用sh命令运行脚本发现$RANDOM为空,但是用bash可以正常运行. 原文地址:https://www.cnblogs.com/HachikoT/p/1263444

linux shell 脚本获取和替换文件中特定内容

1.从一串字符串中获取特定的信息 要求1:获取本机IP:menu.lst为系统镜象的IP配置文件,需要从中获取到本机IP信息(从文件获取信息) 1 timeout 1 2 default 0 3 4 title live 5 find --set-root /casper/vmlinuz 6 kernel /casper/vmlinuz boot=casper ignore_uuid showmounts ip=eth0,10.0.66.66,255.255.240.0,10.0.64.3 7

对于shell脚本获取参数的一些小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i  取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的 当时纠结了好久,最后上百度提问,两位高手给出了答案: 1) #!/bin/sh NUMBER=$# echo $NUMBER i=1 while [ $i -le $NUMBER ] do a[$i]=$1 #将数组a[i]赋值为$1,即取

shell脚本获取网页快照并生成缩略图

获取网页快照并生成缩略图可分两步进行: 1.获取网页快照 2.生成缩略图 获取网页快照 这里我们用 phantomjs 来实现.关于 phantomjs 的详细用法可参考 官方网站 . 1.安装 我的环境是CentOS6.5,安装时直接下载 tarball 然后解压即可. # wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-i686.tar.bz2 # tar -jxvf phantomjs-1

Linux下查看所有用户(shell脚本获取)

在Linux系统中,使用者账号管理最重要的两个文件是/etc/password和/etc/shadow.在/etc/password文件中,每一行都代表一个账号,但是有很多账号是系统账号.比如:bin.adm等,还有管理员账号root.其余的为一般用户账号.每一行的组成有(以:进行分割):1 账号名称:2 密码(与/etc/shadow结合):3 UID 使用者ID:其中0为root用户,1~499为系统用户账号:500+为一般使用者账号. 因此,可以按照UID的范围获取Linux下面所有的用户

通过shell脚本获取日期,并赋给变量

通过shell获取当前8位日期,并赋给变量,并且使用变量作为文件名,建立文件夹 代码如下: ls_date=`date +%Y%m%d` mkdir ${ls_date} 上面两句代码虽然简单 但是在应用中比较实用 获取日期注意事项:date +%Y%m%d 这个字符串是被英文状态下的ESC下面那个键 获取变量注意事项:必须有$与{变量名}组成

shell 脚本 实现随机数

现在我想要1~39之间的随机数该怎么做呢? date +%N   显示当前时间的纳秒   可以把这个数用来做随机数 但我只想要1~39的随机数,该怎么办呢 #! /bin/bash # echo $((( $(date +%N) % 39 ) + 1 )) 取余加1 可以用取余的方法,由于整除时余数为0,所以需要加1 测试:

shell脚本获取zabbix监控图

因为领导提出需要每天看几次服务器的流量图,今天早上9点上班开始截图,十多台服务器.指定时间12小时流量图,截完图反复对照好几遍,一是怕选错主机,二是怕搞错时间段.使用zabbix时间不长,一直感觉很别扭,容易出错.加上中间还做了一点其他东西的统计,最后等邮件发出的时候都已经是10点以后了. 这样下去,恐怕是影响仕途啊.若再加上有什么其他的事情,估计领导可以一边吃午饭一边看报表了,我只能选择吃土了... 网上教程比较多,python写的,perl写的,应为暂时没这方面基础,照搬过来运行报错就无解了

centos7 shell脚本实现随机数

questions: 1.随机数如何获得 2.如何确定随机值的大小是我们所需要的 answers: 1.目前可以通过获取系统时间的毫秒数来得到,毕竟毫秒数还是变化比较快的 可以看到这个速度还是变化很快的,拿来做随机还是很好的一个选择 2.比如我们需要拿到1到39的随机数,应该怎么呢?得到的毫秒数除以39?但这样获得的数字一定不在1到39内. 但我们可以通过取余数的方法得到. #!/bin/bash num=$(date +%N); a=`expr $num % 39 ` echo $a 这样我们