shell中生成指定长度的字符串和随机数

实际工作中,需要用shell生成指定范围的字符串,以便生成相应的随机数,插入数据库,符合自己的需要。以下为想要生成的几种方式:

1)使用系统变量$RANDOM获得32767以内的随机数

shell中有一个环境变量为$RANDOM,实际的取值范围为:0-32767

echo $RANDOM
15514

所以如果想要生成1000以内的随机数就可以用RANDOM取余相应的值即可:

echo $(($RANDOM%1000))
如果想要获得一个范围内的随机数,可以先把相应的数据做个转换,然后在使用RANDOM。例如想要获得(3000-5000)范围内的随机数,将整个范围值减去最小值,得到(0-2000),使用RANDOM,结果如下:

echo $(($RANDOM%2000+3000))

2)获得指定长度的随机数,并且这个随机数大于32767

2.1把RANDOM生成的不同长度的两个随机数组合在一起,例如第一个随机数控制长度为5,第二个长度控制在4,这样生成九位的随机数:

num=`echo $(($RANDOM+10000))$(($RANDOM%1000+1000))`;echo $num
中间的参数可以随机调整成自己想要的值
2.2将RANDOM的值放大生成自己想要的随机数:

假设随机数的范围是(200000,300000),shell脚本如下:

#!/bin/bash

function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(($RANDOM+10000000)) 
    echo $(($num%$max+$min))
}

num=$(rand 200000 300000)
echo $num

exit 0

2.3直接借助于date +%s%N 生成较大的随机数,例如生成1000000以内的随机数:

 rand=`date +%s%N`;echo $(($rand%1000000))

3)生成指定长度,例如长度为10的字符串

#!/bin/bash
function randStr
{
	j=0;
	for i in {a..z};do array[$j]=$i;j=$(($j+1));done
	for i in {A..Z};do array[$j]=$i;j=$(($j+1));done
	for ((i=0;i<10;i++));do strs="$strs${array[$(($RANDOM%$j))]}"; done;
		echo $strs
}
echo `randStr`

 
  

 
  

以上生成的字符串中既有字母也有数字,根据实际情况使用即可

4)生成既有数字又有字母的字符串

#使用date 生成随机字符串

date +%s%N | md5sum | head -c 10
#使用 /dev/urandom 生成随机字符串

cat /dev/urandom | head -n 10 | md5sum | head -c 10


你可能感兴趣的:(linux,shell)