El contenido dentro del archivo bash se ofuscará
echo "Enter The Login Name:"
read username
echo "Enter The Password:"
read password
if [[ $username == "user" && $password == "password" ]]
then
echo -e "You're Logged In\n"
elif [ $username != "user" ]
then
echo -e "Invalid User Name\n"
else
echo -e "Invalid Password\n"
fi
Respuesta1
Uno de los comentarios dice:
Cree un archivo de texto con nombres de usuario y contraseñas. Y mediante bucle compruébelos desde el archivo.
Es una idea decente. El código puede ser así:
#!/bin/bash
function validate {
local user pass
while IFS=' ' read -r user pass; do
[ "$1" = "$user" ] && [ "$2" = "$pass" ] && return 0
done </the/file
return 1
}
read -rp "Login: " u
read -rsp "Password: " p
echo
if validate "$u" "$p"; then
echo "Access granted."
else
echo "Access denied."
fi
Ejemplo /the/file
:
kamil foo
joe bar
anotherUser pa$$word
bill password that contains spaces
Todo lo que está después del primer espacio en una línea es la contraseña.
Notas:
- Esto podría hacerse sin una función. La función es bastante útil aquí debido a su capacidad para
return 0
(tener éxito) desde la mitad del ciclo sin lógica adicional. - Una línea vacía significa inicio de sesión vacío y contraseña vacía. Tenga en cuenta que en *nix cada línea de un archivo de texto debe terminar con un carácter de nueva línea, por lo que un carácter de nueva línea al final del archivo no significa que haya una línea vacía después. Aun así, es bastante fácil poner una línea realmente vacía al final, así que presta atención. Alternativamente, puede agregar algo de lógica a la función para que nunca se acepte un inicio de sesión vacío.
- Para ejecutar este código sin errores, necesita tener acceso de lectura a
/the/file
. Pero si lo hace, puede simplemente leer el archivo y conocer todos los secretos. No arreglaré esto aquí. Almacenar contraseñas de forma segura está más allá del alcance de la pregunta. Si prefiere incrustar contraseñas en el archivo shell, utiliceaquí documento. En lugar de
done </the/file
hacer me gusta:done <<'EOF' kamil foo joe bar anotherUser pa$$word bill password that contains spaces EOF
Tenga en cuenta que citar el primero
EOF
es importante. Sin ello$$
se ampliaría.