Así que estoy intentando crear una secuencia de comandos para generar una contraseña aleatoria con ciertos criterios, pero por alguna razón algunos de mis valores enteros no se muestran como tales. Aquí está el guión:
#!/bin/bash
PASSWORDLENGTH= shuf -i 8-16 -n 1
RNDSOURCE=/dev/urandom
L="acdefghjklmnopqrstuvwxyz"
U="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
N="012345679"
S='@#$%&*+-='
ALL="$L$U$N"
function rndindex() { echo $(($RANDOM % ${#1})); }
password="${L:$(rndindex $L):1}${U:$(rndindex $U):1}${N:$(rndindex $N):1}${S:$(rndindex $S):1}"
password=$password${ALL:$(rndindex $S):1}
while [ "${#password}" -lt "$PASSWORDLENGTH"" ] #Line 15
do
password=$password${ALL:$(rndindex $ALL):1}
done
chars=$password
password=""
while [ "${#password}" -lt "$PASSWORDLENGTH"" ] #Line 22
do
n=$(rndindex $chars)
ch=${chars:$n:1}
password="$password$ch"
if [ $n = $(( ${#chars} - 1 )) ]; then
chars="${chars:0:$n}"
elif [ $n = 0 ]; then
chars="${chars:1}"
else
chars="${chars:0:$n}${chars:$((n+1))}"
fi
done
echo $password
Los mensajes de error que recibo son:
línea 15: [:: expresión entera esperada
línea 22: [:: expresión entera esperada
Respuesta1
Tu segunda línea está equivocada. Debería ser:
PASSWORDLENGTH=$(shuf -i 8-16 -n 1)
y reduzca las comillas dobles ""
a una "
en las líneas 15 y 22.
PD: usa pwgen
o apg
, no reinventes la rueda.