在shell脚本中生成必须具有特殊字符的随机字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在shell脚本中生成必须具有特殊字符的随机字符串相关的知识,希望对你有一定的参考价值。

我正在使用/ dev / urandom生成特殊字符串,但是已经看到有时生成的字符串中不包含特殊字符:

cat /dev/urandom | tr -dc 'a-zA-Z0-9$%&%' | fold -w 12 | head -n 1

输出:a8y34XFXC5ar

我的要求是,生成的字符串输出(通过使用/ dev / urandom)必须包含一个大写字母,一个小写字母,一个特殊字符和一个数字字符。

请提出在每个生成的字符串必须满足上述要求的情况下如何实现此要求?

答案

当输出中必须包含4种不同类型的字符时,制作4个字符串或数组(对于每种类型1),使用random从每个字符串/数组中选择一个字符,然后像添加长度12一样将其追加。shuf当您不想将可能的字符串限制为前4个字符(具有4种不同类型)时的12个字符。

类似

printf -v small "%s" a..z
printf -v large "%s" A..Z
printf -v digit "%s" 0..9
special="@#$%^&*+=<>?"

# Debug loop
for s in small large digit special; do
   echo "str=$!s"
done

get4() 
   for s in small large digit special; do
      echo "$!s" | sed 's/./&\n/g' | shuf | head -1
   done| tr -d '\n'


passw=$(echo "$(get4)$(cat /dev/urandom | tr -dc 'a-zA-Z0-9$%&%' | fold -w 8 | head -n 1)" |
   sed 's/./&\n/g' | shuf | head -12 | tr -d '\n')


echo "$passw"

以上是关于在shell脚本中生成必须具有特殊字符的随机字符串的主要内容,如果未能解决你的问题,请参考以下文章

在java中生成随机字符串[重复]

如何在Java中生成随机字符串[重复]

如何在Java中生成随机字符串[重复]

是否有在Java中生成随机字符的功能?

在Java中生成一个随机字符串[关闭]

如何在 Matlab 中生成随机字符串?