bash - 想在 Linux 服务器上生成一个长度为 15 个字符的随机密码
问题描述
字符串必须包含至少 3 个大写字母、3 个小写字母、3 个数字和至少 3 个特殊字符。
我搜索了很多,但无法获得所需的解决方案。
head /dev/urandom | tr -dc 'A-Za-z0-9-_' | head -c15
这是我发现的,但我能够得到所有的随机组合。我需要的是它必须从每组中输出至少 3 个字符。
解决方案
试试这个脚本:
#!/bin/sh
export LC_ALL=C
upp=$(tr -dc 'A-Z' </dev/urandom | head -c3)
low=$(tr -dc 'a-z' </dev/urandom | head -c3)
dig=$(tr -dc '0-9' </dev/urandom | head -c3)
spe=$(tr -dc '!-/' </dev/urandom | head -c3)
res=$(tr -dc '!-}' </dev/urandom | head -c3)
echo "$upp$low$dig$spe$res"
首先,该语句export LC_ALL=C
确保我们只使用纯 ASCII。这消除了与 Unicode 字符相关的潜在问题。
接下来,将变量upp
分配给 3 个大写字符。同样,low
获取三个小写字母、$dig
三个数字、spe
三个特殊字符和res
三个随机字符。该echo
语句结合了所有四个变量并打印它们。
上面首先打印大写字符,然后打印小写字符,等等。如果您想混淆这个顺序,请将上面的最后一行替换为:
echo "$upp$low$dig$spe$res" | sed 's/./&\n/g' | shuf | tr -d '\n'
推荐阅读
- flutter - Flutter:是否有更好的方法来处理 if/else 语句中每个条件的调用 setState()?
- python - Python语音识别,Pyaudio不听但给出这个
- html - CSS:如何在文本布局上定义全宽边框?
- python - Django REST框架:在序列化程序中获取相关模型的字段
- javascript - 重新更新数据时 UseEffect 挂钩无法正常工作?
- javascript - 破坏分配javascript不起作用
- amazon-web-services - 仅将列入白名单的项目写入 DynamoDB
- java - 对象被向上转换后(在 Java 中)是否可以从先前的引用中访问?
- objective-c - 如何查看存储在 NSData 中的数据?
- macos - 如何在 mac 上重置我的 PATH 和我的 shell