我使用Bash。我想在系统时间生成randrom字符串。唯一字符串的长度必须介于10到30个字符之间。有人能帮我吗?
有很多方法可以做到这一点,我最喜欢的一种是使用urandom
设备:
burhan@sandbox:~$ tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
CCI4zgDQ0SoBfAp9k0XeuISJo9uJMt
tr
(translate)确保只显示字母数字fold
将其包装为30个字符宽度head
确保我们只得到第一行
要使用当前系统时间(因为您有此特定要求):
burhan@sandbox:~$ date +%s | sha256sum | base64 | head -c30; echo
NDc0NGQxZDQ4MWNiNzBjY2EyNGFlOW
date +%s
=这是我们基于日期的种子- 我们通过一些散列来获得一个"随机"字符串
- 最后我们将其截断为30个字符
其他方式(包括我上面列出的两种)也可以在这个页面上找到,如果你只需谷歌搜索,也可以找到其他方式。
也许您可以使用uuidgen -t
。
生成基于时间的UUID。此方法基于系统时钟加上系统的以太网硬件地址(如果存在)创建UUID。
我最近编写了一个脚本来处理这个问题,输出是33位md5校验和,但您可以使用sed将其缩小到10-30之间。
例如gen_uniq_id.bsh | sed 's/(.{20})(.*$)/1/'
该脚本相当健壮——它使用当前时间到纳秒、/dev/urandom、鼠标移动数据,并允许选择性地更改随机和鼠标数据收集的收集时间。
它还有一个-s选项,允许合并一个额外的字符串参数,这样你就可以从任何东西中随机种子。
https://code.google.com/p/gen-uniq-id/