您的位置:首页 > 运维架构 > Shell

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

2015-04-05 23:10 411 查看
实际工作中,需要用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: