运行结果:
# sh mimvp_shell_rand.sh
1 48952205
2 43220726
3 45241774
4 45758327
5 43147638
6 44319391
7 46834434
8 41601915
9 48687238
10 45029848
7. 生成随机字符串
上述所有可以生成随机整数的方法,都可以生成随机字符串,原理是对随机整数进行 md5sum 计算
示例:生成10位随机字符串
# 使用date 生成随机字符串 date +%s%N | md5sum | head -c 10 # 使用 /dev/urandom 生成随机字符串 cat /dev/urandom | head -n 10 | md5sum | head -c 10
随机数应用一
随机生成端口号范围为 1025 ~ 65536 (通用于 CentOS, Ubuntu, MacOS),并支持排除任意添加的端口号
应用的随机数是 方法3. 使用 /dev/random 和 /dev/urandom 随机文件
应用代码:
#!/bin/bash
# mimvp.com 2016.05.10
## 应用一: 随机生成端口号 1025 ~ 65536 (通用于 CentOS, Ubuntu, MacOS)
function mimvp_app_port() {
min=$1
max=$2
mid=$(($max-$min+1))
num=$(head -n 20 /dev/urandom | cksum | cut -f1 -d ' ')
randnum=$(($num%$mid+$min))
# 排除的端口号 1080, 4500, 8080, 58866, 可以任意添加
port_exclude='1080,4500,8080,58866'
flag=`echo ${port_exclude} | grep ${randnum} | wc -l`
while [ "$flag" -eq "1" ]
do
num=$(head -n 20 /dev/urandom | cksum | cut -f1 -d ' ')
randnum=$(($num%$mid+$min))
flag=`echo ${port_exclude} | grep ${randnum} | wc -l`
done
echo $randnum
}
function print_app_port() {
for i in {1..10};
do
randnum=$(mimvp_app_port 1025 65535)
echo -e "$i t $randnum"
done
}
print_app_port
运行结果:
# sh mimvp_shell_rand.sh
1 29483
2 61738
3 31935
4 3242
5 19865
6 56677
7 5944
8 28579
9 12510
10 31844
随机数应用二
随机生成长度为10的密码字符串 (通用于 CentOS, Ubuntu, MacOS)
应用的随机数是 方法1:使用系统的 $RANDOM 变量
应用代码:
#!/bin/bash
# mimvp.com 2016.05.10
## 应用二: 随机生成长度为10的密码字符串 (通用于 CentOS, Ubuntu, MacOS)
function mimvp_app_passwd() {
user_array=`seq -w 10`
echo ${user_array[@]}
for idx in ${user_array[@]}
do
user_name="user-${idx}"
passwd=`echo $RANDOM | md5sum | cut -c11-20`
echo -e "${user_name} t ${passwd}"
done
}
mimvp_app_passwd










