Linux Shell 生成随机数和随机字符串的方法示例

2019-09-23 08:53:28于丽

运行结果:

# 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