shell中产生任意范围随机数和任意长度随机字符串

回复 收藏
本帖最后由 方琪 于 2016-1-1 21:20 编辑

这是阿铭老师的原帖http://www.apelearn.com/bbs/thread-5367-1-1.htm一,关于随机数
用$RANDOM我们可以实现0到99999的随机数,但在实际写脚本的时候也许需要的不是这个范围的,比如说想要0-999的这个时候怎么办呢?
其实实现起来并不难,用取余 "%"这个运算符就可以搞定了,C=A%B表示的是将A/B的余数赋值给C,下面来看几个例子。
案例一:实现0到999范围内的随机数
echo  $[$RANDOM%1000]
案例二:实现0到100范围内随机数
echo   $[$RANDOM%101]
案例三:实现15到50范围内随机数
echo  $[$RANDOM%36+15]
从这几个案例中可以很清晰的看出,假设我们要实现A到B范围(B>A)内的随机数,那么通用公式为$[$RANDOM%(B-A+1)+A],为什么要加1呢?因为A对B取余的结果最小是0,最大是A-1。因此需要加1才能满足我们的要求,也就是$RANDOM%(B-A+1)这部分的值是浮动的,只要使得它的浮动范围和我们随机数需求的浮动范围相等即可。




关于随机数的另一个常见用法:
有时我们需要对指定结果进行随机,比如抽签,或者随机生成验证码,除了用数字做映射,我们可以用数组来实现:





    1. pool=(Mon  Tue  Wed Tur Fri Sat  Sun)#若将A~Z,a~z,0~9依次写入pool中,然后连续取四次,就能够实现验证码的结果了。
    2. num=${#pool[*]}
    3. result=${pool[$((RANDOM%num))]}

更多关于随机数的应用请大家自行百度。

二,关于随机长度字符串

个人比较推荐使第三种方法 比较简单。

  1. #使用date 生成随机字符串
  2. date +%s%N | md5sum | head -c 10
  3. #使用 /dev/urandom 生成随机字符串
  4. cat /dev/urandom | head -n 10 | md5sum | head -c 10
  1. #使用mkpasswd 命令,需要安装expect yum包安装即可。




2015-12-01 14:11 举报
已邀请:
0

蓝色风暴

赞同来自:

表示看不懂啊
0

HwangChen

赞同来自:

明白了,如果求15到50随机数 就相当于先求0-35随机数 再加上15 所以是 $[$RANDOM%36+15]{:7_165:}
0

方琪

赞同来自:


额,,挺好理解的啊
0

lyhabc

赞同来自:

1.数组定义, 一对括号表示是数组,数组元素用“空格”符号分割开。

# a=(1 2 3 4 5)


# echo ${a
  • } //这样会打印整个数组的元素,或者使用 echo ${a[@]}


    一键安装包
    `cat /dev/urandom | head -1 | md5sum | head -c 8`  #取前8位-c 8
  • 0

    583938282

    赞同来自:

    请问下,那么我要生成三组随机数,怎么去除重复呢?

    回复帖子,请先登录注册

    退出全屏模式 全屏模式 回复
    评分
    可选评分理由: