shell脚本随机数生成方式

losetowin 发布于:2016-1-13 0:10 分类:linux  有 4475 人浏览,获得评论 2 条 标签: linux shell 随机数 

本文地址:http://www.dutycode.com/shell_suijishu_shengcheng.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。
起因:
     新建了博客,需要给一部分用户创建用户名和密码,如果再使用Java程序去做,稍显笨重。因为只需要一次,后续就不需要再创建了。所以,初步打算使用shell来做,轻量级的。
     但是,密码不能是一样的,原因在于,如果密码都一样,就容易出现盗号的情况了。也就没有了密码本来该具有的含义。
     所以,需要将密码随机生成。
     So,问题来了,shell怎么随机生成随机数呢

解决方式:
     PS:解决方式,来自于网络搜索,文末会附属上原文连接。
     最直接想到的方式,自然是时间戳了。
          1、不能使用秒级别的,原因在于,多线程或者运行速度较快时,容易出现相同的情况。

          2、可以使用纳秒级别的。基本上不会出现冲突。 

[root@AY1312180952417614c9Z ~]# date +"%s%N"
1452613725761954178
          BTW: OSX系统下,是不能使用%N这个格式化方式的。
          
          那,如果想指定一个范围内的随机数怎么实现?看下面代码。可以自定一个函数。 
#!/bin/bash

function getRandom(){
        begin=$1;
        end=$2;
        numrange=${end}-${begin}
        randomnum=`date +"%s%N"`
        ((retnum=randomnum%numrange+min))
        echo $retnum; ##通过echo打印出结果,可以用做返回值。
}

num=`getRandom 1 100` ##生成1-100之间的随机数
echo $num 
 运行下,可以看到结果。

还有其他办法吗?
当然有,Linux本身存在一个随机数变量,可以直接使用。
随机数变量:  $RANDOM
[root@AY1312180952417614c9Z ~]# echo $RANDOM
27176
[root@AY1312180952417614c9Z ~]# echo $RANDOM
4823
方法三:
     可以使用AWK来生成随机数,使用awk里面的函数。 
awk 'BEGIN{srand();print rand()}'
方法四:
     使用linux的一些设备  /dev/random 和 /dev/urandom 信息来做随机数.
      /dev/random 和 /dev/urandom 里面存储的是当前运行环境的实时数据,可以看作是一个随机数,
[root@AY1312180952417614c9Z ~]# head -100 /dev/urandom | cksum | cut -f1 -d" "
1327000850
这里涉及到一个linux命令,cksum,使用方式和介绍可以看这里:http://blog.chinaunix.net/uid-10257388-id-2967638.html


参考文章:
http://zhidao.baidu.com/link?url=MKfHv9XJkQwhy0q5KBKhCgL5zLPcIda1WqtaP_P8JrScsiplEe7LC62CjL_EX_Y1Sb3gQ6mVMhrpdqf2j2Zh6mtPSVUf_jLASHnIQCVwVeS

http://www.cnblogs.com/chengmo/archive/2010/10/23/1858879.html


版权所有:《攀爬蜗牛》 => 《shell脚本随机数生成方式
本文地址:https://www.dutycode.com/shell_suijishu_shengcheng.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。