本帖最后由 方琪 于 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)这部分的值是浮动的,只要使得它的浮动范围和我们随机数需求的浮动范围相等即可。
关于随机数的另一个常见用法:
有时我们需要对指定结果进行随机,比如抽签,或者随机生成验证码,除了用数字做映射,我们可以用数组来实现:
这是阿铭老师的原帖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)这部分的值是浮动的,只要使得它的浮动范围和我们随机数需求的浮动范围相等即可。
关于随机数的另一个常见用法:
有时我们需要对指定结果进行随机,比如抽签,或者随机生成验证码,除了用数字做映射,我们可以用数组来实现:
- pool=(Mon Tue Wed Tur Fri Sat Sun)#若将A~Z,a~z,0~9依次写入pool中,然后连续取四次,就能够实现验证码的结果了。
- num=${#pool[*]}
- result=${pool[$((RANDOM%num))]}
更多关于随机数的应用请大家自行百度。
二,关于随机长度字符串
个人比较推荐使第三种方法 比较简单。
- #使用date 生成随机字符串
- date +%s%N | md5sum | head -c 10
- #使用 /dev/urandom 生成随机字符串
- cat /dev/urandom | head -n 10 | md5sum | head -c 10
- #使用mkpasswd 命令,需要安装expect yum包安装即可。
编辑回复