您的位置:首页 > 科技 > IT业 > shell中获取随机数与随机字符串的方式

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

2024/12/22 12:10:29 来源:https://blog.csdn.net/qq_37278522/article/details/139976061  浏览:    关键词: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
^Creal	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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com