generar una contraseña que tenga una longitud aleatoria entre 8 y 16 (tengo el generador pero no es dinámico)

generar una contraseña que tenga una longitud aleatoria entre 8 y 16 (tengo el generador pero no es dinámico)

Este es mi generador de contraseñas y genera 8 caracteres y los mezcla. Pero necesito darle una longitud dinámica. ¿Cómo haría para hacer eso? Por lo tanto, la salida tendría una longitud diferente entre 8 y 16 caracteres.

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

Respuesta1

Colocar

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

y luego generar $lenpersonajes, utilizando un marco como el que ofrecí en mi respuesta a su muy relacionadocómo generar solo un carácter especial en este generador de contraseñaspregunta,

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

Te dejo a ti decidir cómo generar los personajes individuales para que obtengas una distribución del grupo de personajes a tu gusto. Eso está más allá del alcance de su pregunta y incluiría escribir sus requisitos (es decir, escribirtu pregunta) para ti.

información relacionada