6

我与 Bash 一起工作。我想按系统时间生成随机字符串。唯一字符串的长度必须在 10 到 30 个字符之间。有人可以帮我吗?

4

3 回答 3

11

有很多方法可以做到这一点,我最喜欢使用该urandom设备的一种:

burhan@sandbox:~$ tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
CCI4zgDQ0SoBfAp9k0XeuISJo9uJMt
  • tr(翻译)确保只显示字母数字
  • fold将其包装为 30 个字符宽度
  • head确保我们只得到第一行

要使用当前系统时间(因为您有此特定要求):

burhan@sandbox:~$ date +%s | sha256sum | base64 | head -c30; echo
NDc0NGQxZDQ4MWNiNzBjY2EyNGFlOW
  • date +%s= 这是我们基于日期的种子
  • 我们通过几个哈希运行它以获得“随机”字符串
  • 最后我们将其截断为 30 个字符

其他方式(包括我上面列出的两种)可以在这个页面和其他方式,如果你只是google

于 2013-07-15T09:29:30.333 回答
4

也许你可以使用uuidgen -t.

生成基于时间的 UUID。此方法基于系统时钟加上系统的以太网硬件地址(如果存在)创建 UUID。

于 2013-07-15T09:23:18.000 回答
0

我最近编写了一个脚本来处理这个问题,输出是 33 位 md5 校验和,但您可以使用 sed 将其修剪到 10-30 之间。

例如gen_uniq_id.bsh | sed 's/\(.\{20\}\)\(.*$\)/\1/'

该脚本相当健壮 - 它使用当前时间到纳秒、/dev/urandom、鼠标移动数据,并允许有选择地更改随机和鼠标数据收集的收集时间。

它还有一个 -s 选项,允许合并一个额外的字符串参数,所以你可以从任何东西中随机种子。

https://code.google.com/p/gen-uniq-id/

于 2015-03-10T04:46:28.413 回答