2025-12-12 17:45:02 +01:00
#!/bin/bash
# Funciones Puras
# En caso de muchos condicionales
# Recurrir a negaciones
longitud( ) {
local passwd = $1
local long = ${# passwd }
if [ [ " $long " -gt 8 ] ] ; then
echo "PWD_GT_8"
else
echo "PWD_LT_8"
fi
}
minusculas( ) {
local passwd = $1
if [ [ " $passwd " = ~ [ a-z] ] ] ; then
echo "MINLETTERS"
else
echo "NO_MINLETTERS"
fi
}
mayusculas ( ) {
local passwd = $1
2025-12-14 01:36:11 +01:00
if [ [ " $passwd " = ~ [ A-Z] ] ] ; then
2025-12-12 17:45:02 +01:00
echo "MAYLETTERS"
else
echo "NO_MAYLETTERS"
fi
}
2025-12-14 01:36:11 +01:00
numeros ( ) {
local passwd = $1
if [ [ " $passwd " = ~ [ 0-9] ] ] ; then
echo "NUMBERS"
else
echo "NO_NUMBERS"
fi
}
caracteresE ( ) {
local passwd = $1
if [ [ " $passwd " = ~ [ ^a-zA-Z0-9] ] ] ; then #Caso curioso: Se recurre a la negacion, ya que si existe un
#caracter especial, este no estará en las tablas de mayuscula, minuscula ni numeros.
echo "ECARACTERS"
else
echo "NO_ECARACTERS"
fi
}
2025-12-12 17:45:02 +01:00
2025-12-14 01:36:11 +01:00
validador ( ) {
local passwd = $1
local long = $( longitud " $passwd " )
local min = $( minusculas " $passwd " )
local may = $( mayusculas " $passwd " )
local num = $( numeros " $passwd " )
local carE = $( caracteresE " $passwd " )
res = ( " $long " " $min " " $may " " $num " " $carE " )
local puntuacion = 0
local totcriterios = 5
2025-12-12 17:45:02 +01:00
2025-12-14 01:36:11 +01:00
for i in " ${ res [@] } " ; do
if [ [ $i = "PWD_GT_8" || $i = "MINLETTERS" || $i = "MAYLETTERS" || $i = "NUMBERS" || $i = "ECARACTERS" ] ] ; then
( ( puntuacion++) ) # Esto tiene un error de sintaxis aritmetica: Se esperaba un operando (el elemento de error es "+"). El error sale cuando no se introduce uno de los valores anteriores, como por ejemplo, no poner ningun simbolo.
#Update: EUREKA! Al poner $, bash expande el valor antes de la operacion aritmetica.
#Si la puntuacion vale 0, bash intenta ejecutar ((0++)).
fi
done
( ( porcentaje = puntuacion * 100 / totcriterios) )
if [ [ " $porcentaje " -lt 41 ] ] ; then
echo "Weak"
elif [ [ " $porcentaje " -lt 71 ] ] ; then
echo "Mid"
else
echo "Strong"
fi
}
read -p "Introduce una contraseña: " a
resultado = $( validador " $a " )
2025-12-12 17:45:02 +01:00
2025-12-14 01:36:11 +01:00
echo " Su contraseña es $resultado "