shell脚本生成随机数的若干方法总结
创建账户时我们需要配置初始随机密码,使用手机注册时会需要随机的验证码,再如俄罗斯方块需要随机出形状。这都说明随机数据很重要,让我们来看看shell脚本中随机数的生成方法的一些案例
1.使用字符串截取的方式生成随机密码
#!/bin/bash
#功能描述(Description):使用字串截取的方式生成随机密码.
#定义变量:10个数字+52个字符.
key="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
randpass(){
if [ -z "$1" ];then
echo "randpass函数需要一个参数,用来指定提取的随机数个数."
return 127
fi
#调用$1参数,循环提取任意个数据字符.
#用随机数对62取余数,返回的结果为[0-61].
pass=""
for i in `seq $1`
do
num=$[RANDOM%${#key}]
local tmp=${key:num:1}
pass=${pass}${tmp}
done
echo $pass
}
#randpass 8 取8个字符
#randpass 16
#echo $(randpass 6) 从key中随机取6个字符输出
#创建临时测试账户,为账户配置随机密码,并将密码保存至/tmp/pass.log.
useradd tomcat
passwd=$(randpass 6)
echo $passwd | passwd --stdin tomcat
echo $passwd > /tmp/pass.log
2.使用命令生成随机数
uuid的生成方法
[root@localhost ~]# uuidgen
cc3652e3-7e54-498b-a4e3-6ff746f5cc73
[root@localhost ~]# uuidgen
6f5d5581-f4b4-4443-8cb3-37ad11b97d52
[root@localhost ~]# uuidgen
fc48a818-d323-48f1-b975-86e8f6d9046a
openssl命令来生成
生成16进制的随机字符串
[root@localhost ~]# openssl rand -hex 1
8e
[root@localhost ~]# openssl rand -hex 2
eeb6
[root@localhost ~]# openssl rand -hex 3
2aefbb
[root@localhost ~]# openssl rand -hex 4
78706e3a
[root@localhost ~]# openssl rand -hex 5
0dfdd2bbbc
[root@localhost ~]# openssl rand -hex 6
e7a550493377
生成含有特殊符号的随机字符串
[root@localhost ~]# openssl rand -base64 1
eQ==
[root@localhost ~]# openssl rand -base64 6
PdOc8SXT
[root@localhost ~]# openssl rand -base64 10
mHDkK/mEgITaVA==
使用base64算法生成的随机数据,其最终的长度为(n/3)向上取整后在乘以4.
如(1/3)=0.333333 ,向上取整为1,base64编码后长度为1×4=4位
如(6/3)=2 ,向上取整为2,base64编码后长度为2×4=8位
如(10/3)=3.333333 ,向上取整为4,base64编码后长度为4×4=16位
[root@localhost ~]# date +%s #通过时间提取随机数字
1588802225
[root@localhost ~]# date +%s #1970-1-1到现在的秒数
1588802231
[root@localhost ~]# date +%s%N #1970-1-1到现在的纳秒数
1588802237373838045
#对明文加密生成随机字符串
[root@localhost ~]# echo abc | openssl passwd -stdin
89n8souuGpQS6
[root@localhost ~]# echo 1234 | openssl passwd -stdin
Mhm/mQIxCm5nE
#对密文用一段杂字生成随机字符串
openssl passwd -1 -salt string //string一般为8位
[root@localhost ~]# openssl passwd -1 -salt hellotom
Password:
$1$hellotom$5j6sZNiOfuQiZuz421aFS.
3.使用设备文件来生成
在linux操作系统中默认提供了两个可以生成随机数的设备文件:/dev/random
/dev/urandom
。很多程序都会调用这些设备生成随机数据,如SSH、GPG、Tomcat。dev/random
依赖于系统中断(Interrupt),因此当系统中断不足时,该文件是无法提供足够的随机数据,这样会导致需要使用random
生成随机数据的程序阻塞。而/dev/urandom
则不依赖于系统中断,在系统中断不足时也能提供足够的随机数据。我们可以用文本工具直接查看这两个文件,因为这两个文件可以提供无限的随机数据,所以需要使用Ctrl+c来中断查看。
[root@localhost ~]# cat /dev/random
̗"pHpA8瑀mTd0묨9b
®Ɍ«>cᇵBxXshell ¡˩)¼kԵd