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私があなたの非常に関連した質問に対する回答で提示したようなフレームワークを使用して、文字を生成しますこのパスワードジェネレーターで特殊文字を1つだけ生成する方法質問、

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

個々の文字をどのように生成して、好みの文字グループ分布を得るかはあなたにお任せします。これはあなたの質問の範囲を超えており、要件の記述(つまり、記述)に関係します。あなたの質問) あなたのために。

関連情報