Lin Hong's TECH Blog! 刀不磨要生锈,人不学习要落后 - Thinking ahead

[原创]Unix脚本产生随机数

2016-06-22
   

之前写了在数据库中产生随机数目,如下: insert into tab01(random_record,checkdate) select int(rand()*100)+1,current timestamp from sysibm.sysdummy1

在shell中产生随机数的方法有哪些呢?

Unix脚本产生随机数

之前写了在数据库中产生随机数目,如下:

insert into tab01(random_record,checkdate) select int(rand()*100)+1,current timestamp from sysibm.sysdummy1

然后脚本连接数据库读取这一列,其实在Unix Shell脚本产生随机数方法也有几种,如下:(参考资料来自于互联网)

方法1:时间数产生

  • 修改前:第二个数字如096148790,首位为0的话,就会转化为其他进制的数字

    [bigdatalyn@ser1 ~]$ cat 1.sh #!/bin/sh min=1 max=100 num=$(date +%s+%N); ((ret=num%max+min)) echo $ret [bigdatalyn@ser1 ~]$ [bigdatalyn@ser1 ~]$ sh -x 1.sh

    • min=1
    • max=100 ++ date +%s+%N
    • num=1466659819+096148790
    • (( ret=num%max+min )) 1.sh: line 5: ((: 1466659819+096148790: value too great for base (error token is “096148790”)
    • echo

    [bigdatalyn@ser1 ~]$

  • 修改为: [bigdatalyn@ser1 ~]$ cat 1.sh #!/bin/sh min=1 max=100 num=$(date +%s+10#%N); ((ret=num%max+min)) echo $ret [bigdatalyn@ser1 ~]$

方法2:随机变量产生

[bigdatalyn@ser1 ~]$ echo $RANDOM
21417
[bigdatalyn@ser1 ~]$ echo $RANDOM
15283
[bigdatalyn@ser1 ~]$ 
  • 产生20到30的随机数

    [bigdatalyn@ser1 ~]$ echo $(($(($RANDOM%10))+20)) 22 [bigdatalyn@ser1 ~]$ echo $(($(($RANDOM%10))+20)) 21 [bigdatalyn@ser1 ~]$

方法3:系统内部/dev/random,urandom取得

[bigdatalyn@ser1 ~]$ head -200 /dev/urandom | cksum
780821577 45498
[bigdatalyn@ser1 ~]$ head -200 /dev/urandom | cksum | cut -f1 -d" "
811645629
[bigdatalyn@ser1 ~]$ head -200 /dev/urandom | cksum | cut -f1 -d" "
524097684
[bigdatalyn@ser1 ~]$ 

方法4:linux的UUID码取得

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

[bigdatalyn@ser1 ~]$ cat /proc/sys/kernel/random/uuid
6fa009d4-d88b-46b6-8e6b-d333dfa176d1
[bigdatalyn@ser1 ~]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "
2956972419
[bigdatalyn@ser1 ~]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "
2869415216
[bigdatalyn@ser1 ~]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "
3053968409
[bigdatalyn@ser1 ~]$ 

Comments