shell中获取随机数与随机字符串的方式

1.date方式

获取随机数:date +%N%s

获取随机字符串:date +%N%s|md5sum|cut -c1-10|tr '0-9' 'a-z'

注:

date +%N  获得当前时间的纳秒数据,精确到亿分之一秒,在多核CPU大量循环里面,也可能有相同随机数碰撞

date +%s 获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数,在做循环任务时,多线程同时执行不能满足要求

所以我们用date +%N%s

详情看代码:

#获取随机数
[root@ansible01 ~]# date +%N%s
7753063281719364108
#获取随机字符串
[root@ansible01 ~]# date +%N%s|md5sum |cut -c 1-10|tr '0-9' 'a-z'
adjdeeeadb

2./dev/random与/dev/urandom方式

        /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流

        这两个设备的差异在于:/dev/random的random依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random设备可以保证数据的随机性

获取随机数:tr -dc '0-9' </dev/random | head -c 10

获取随机字符串:tr -cd 'a-z' </dev/urandom|head -c10

详情请看代码:

#获取随机数以及命令运行时间
[root@ansible01 ~]# tr -dc '0-9' </dev/random | head -c 10
5265370806
[root@ansible01 ~]# time tr -dc '0-9' </dev/random | head -c 10
5446642762
^C

real	0m27.923s
user	0m0.000s
sys	0m0.080s

#获取随机字符串以及命令运行时间
[root@ansible01 ~]# tr -cd 'a-z' </dev/urandom|head -c10
ezaickkrin
[root@ansible01 ~]# time tr -cd 'a-z' </dev/urandom|head -c10
ytbwoimtul
real	0m0.003s
user	0m0.004s
sys	0m0.000s

对比能够看出在对/dev/random取随机数时,会很慢,不建议使用,我们可以只用/dev/urandom来获取

#获取随机数以及命令运行时间
[root@ansible01 ~]# tr -cd '0-9' </dev/urandom|head -c10
8359693358

#获取随机字符串以及命令运行时间
[root@ansible01 ~]# tr -cd 'a-z' </dev/urandom|head -c10
ezaickkrin

3.使用内部系统变量($RANDOM)

        $RANDOM是一个内置变量,用于生成一个介于1和32767之间的随机整数

#生成随机数
[root@ansible01 ~]# echo $RANDOM
10833
#生成一个[1, max) 随机数
$RANDOM * $max / 32767 + 1;
#生成一位、二位、三位、四位、五位随机数,最大只能生成五位随机数
[root@ansible01 ~]# echo $(( $RANDOM % 10 + 1 ))
7
[root@ansible01 ~]# echo $(( $RANDOM % 100 + 1 ))
71
[root@ansible01 ~]# echo $(( $RANDOM % 1000 + 1 ))
962
[root@ansible01 ~]# echo $(( $RANDOM % 10000 + 1 ))
5009
[root@ansible01 ~]# echo $(( $RANDOM % 100000 + 1 ))
25564
#生成随机字符串
[root@ansible01 ~]# echo $RANDOM|tr "0-9" "a-z"
bafic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值