shell生成随机字符的几种方法

一般在写shell脚本的时候,会有需要生成一些随机字符,比如在写批量生成用户+随机密码的脚本的时候,就会用到随机生成的字符串来作为新建用户的密码。以下的几种方式可以随机生成字符串。当然,还要许多方法都能完成文章标题的目的,这里仅列举出来部分的。

1.使用shell的random变量

[root@virmach ~]# echo $RANDOM 
1908

2.使用openssl

[root@virmach ~]# openssl rand -base64 8 # 8是8位的意思
K0NYLr0u0Xo=

3.random+openssl混合

[root@virmach ~]# echo $RANDOM `openssl rand -base64 8`
20446 +A7KGgNfPLc=

4.mkpasswd方法

[root@virmach ~]# yum -y install expect 
[root@virmach ~]# mkpasswd -l 8
Ykv{b12R

5.uuid方法

[root@virmach ~]# cat /proc/sys/kernel/random/uuid  | md5sum |cut -c 1-9  # 1-9 取8位,最后的9是结束。
362b84efe

6.dev方法

[root@virmach ~]# head /dev/urandom |cksum |md5sum |cut -c 1-9
89da0c70b

7.date日期方法

[root@virmach ~]# date +%s%N | md5sum |cut -c 1-9
4738152c2

8.for循环方法

[root@virmach ~]# for i in `seq 20`;do date +%s%N | md5sum | cut -c 1-9;done | sort | uniq -c | sort -rn -k1
      1 fa39a560c
      1 ecd4ceffd
      1 d55c46cbc
      1 cb62000bd
      1 c59bd7c47
      1 c3184203f
      1 b425ea72d
      1 9a7862d2c
      1 89937f1f6
      1 77ada8ace
      1 64b21e854
      1 5d846676c
      1 5531089be
      1 539eeb6f1
      1 31b408a3d
      1 3121ec947
      1 2cf29525f
      1 0c4896052
      1 0a50fe20f
      1 085964e34
 
 
[root@virmach ~]# for i in `seq 20`;do echo $RANDOM | md5sum | cut -c 1-9 ;done | sort | uniq -c | sort -rn -k1 
      1 f5e451aa0
      1 dda67bca5
      1 d0e33a01c
      1 cadd4e4b2
      1 bd3c38da5
      1 bafa3dae3
      1 b558cb841
      1 a9a2bc409
      1 a8741275b
      1 9ed3345eb
      1 781e1b49e
      1 74e440e32
      1 5ab403a0f
      1 4df853e04
      1 4dbe8c068
      1 3044e58f9
      1 21daea994
      1 0eb55df9e
      1 0c9d59d9b
      1 022520557

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

【批处理学习笔记】第二十三课:用户变量和变量引用

用户变量     编写批处理程序时,用户根据需要自己定义的变量称之为用户变量。用户变量类似于C语言里面的变量,仅仅在定义该变量的程序中有效。     用户变量由...

2854
来自专栏我的小碗汤

golang初探与命令源码分析

就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数。其中main.go和hello.go同属于main包。但是在main....

722
来自专栏jiajia_deng

Qt 注册自定义数据类型提供信号和槽函数传递参数

Qt 信号和槽函数参数只能是基于 Qt 的基础类型的,比如 QString、int、bool 等,如果想传递自定义类型默认情况下是行不通的。要想在 Qt 的信号...

5112
来自专栏黑泽君的专栏

day25_day27_Struts2_学习回顾

        表现层、MVC模式。 2、Struts1和Struts2的一个显著区别是什么?     答:

985
来自专栏码匠的流水账

openresty下lua的function定义及调用

/usr/local/openresty/lualib/resty/string.lua

1921
来自专栏武培轩的专栏

Keep面经汇总

原理:泛型的实现是靠类型擦除技术,类型擦除是在编译期完成的,在编译期,编译器会将泛型的类型参数都擦除成它的限定类型,如果没有则擦除为object类型之后在获取的...

1182
来自专栏西安-晁州

struts2随笔

1、struts.properties配置常量等同于struts.xml中配置(置于类加载路径下面) struts.multipart.maxSize文件上传最...

2140
来自专栏ShaoYL

堆和栈的区别

28010
来自专栏BinarySec

NETBIOS主机名编码算法

最近在看SMB协议,在自己构造数据包的时候发现了一个问题。 经过查阅资料发现NETBIOS对主机名的编码方式如下: 1.将字符补齐到16字节,不够的用空格补 ...

3968
来自专栏架构之路

Struts2 中的值栈的理解

通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求道服务器端 action时,...

2653

扫码关注云+社区

领取腾讯云代金券