生成 8 - 16 之间随机长度的密码(我有生成器,但它不是动态的)

生成 8 - 16 之间随机长度的密码(我有生成器,但它不是动态的)

这是我的密码生成器,它生成 8 个字符并对其进行随机排列。但我需要使其动态长度。我该怎么做呢?因此输出的长度会有所不同,介于 8 - 16 个字符之间。

if [ $# -eq 0 ]; then
num=("0" "1" "2" "3" "4" "5" "7" "8" "9")
special=("@" "#" "$" "%" "*" "-" "+")
upper=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
lower=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
lower2=${#lower[*]}   #${lower[$((RANDOM%lower2))]}
upper2=${#upper[*]}   #${upper[$((RANDOM%upper2))]}
num2=${#num[*]}     #${num[$((RANDOM%num2))]}
special2=${#special[*]} #${special[$((RANDOM%special2))]}

echo "${special[$((RANDOM%special2))]}${num[$((RANDOM%num2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}" | fold -w 1 | shuf | tr -d '\n'
echo
fi

答案1

len=$((8+RANDOM%9))

然后$len使用一个框架生成字符,就像我在回答与您密切相关的问题时提供的框架一样如何在此密码生成器中仅生成一个特殊字符问题,

word=
for ((i=0; i<len; i++))
do
    thischar=(Generate one character by whatever logic you like)
    word="$word$thischar"
done
echo "$word"

我让您决定如何生成各个字符,以便您获得符合您喜好的字符组分布。这超出了您的问题范围,并且会涉及编写您的要求(即编写你的问题) 为你。

相关内容