前言

前段时间写了一个Shell需要用到随机数生成,才发现Linux自带的$RANDOM只能生成0—32767之间的随机数,并且不能自定义范围,不太方便直接使用,于是写了这个Shell脚本

思路

  1. 用head查看/dev/urandom随机生成的10个字节
  2. 用cksum生成校验码,再用其生成随机数$num
  3. 将$num和随机数范围最大值$2求余,求得结果为0到$2减1;再把求余值$2加上1,这样就已经把范围缩小到0到$2
  4. 求余后加上最小值$1,这样就把最小值范围缩小到了$1
  5. 综上所述,再将求余值减去后面加上的最小值$1,将范围锁定到$1-$2,得到如下代码

代码

random.sh

1
2
3
4
5
#!/bin/bash
min=$1
max=$(($2-$min+1))
num=$(head /dev/urandom -c 10 | cksum | awk '{print $1}')
echo $(($num%$max+$min))

最终精简版

random.min.sh

1
echo $(($(head /dev/urandom -c 10 | cksum | awk '{print $1}')%$(($2-$1+1))+$1))

使用方法

生成3到7之间的随机数

1
bash random.min.sh 3 7

也可以作为函数使用