Der Inhalt der Bash-Datei wird verschleiert
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
Antwort1
Einer der Kommentare lautet:
Erstellen Sie eine Textdatei mit Benutzernamen und Passwörtern. Und überprüfen Sie diese über eine Schleife aus der Datei.
Das ist eine gute Idee. Der Code könnte so aussehen:
#!/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
Beispiel /the/file
:
kamil foo
joe bar
anotherUser pa$$word
bill password that contains spaces
Alles nach dem ersten Leerzeichen in einer Zeile ist das Passwort.
Anmerkungen:
- Dies könnte ohne eine Funktion erfolgen. Die Funktion ist hier recht nützlich, da sie in der Lage ist,
return 0
ohne zusätzliche Logik von der Mitte der Schleife aus (erfolgreich) zu starten. - Eine leere Zeile bedeutet einen leeren Login und ein leeres Passwort. Beachten Sie, dass in *nix jede Zeile in einer Textdatei mit einem Zeilenumbruchzeichen enden sollte, sodass ein Zeilenumbruchzeichen ganz am Ende der Datei nicht bedeutet, dass danach eine leere Zeile folgt. Es ist jedoch recht einfach, am Ende eine wirklich leere Zeile einzufügen, seien Sie also vorsichtig. Alternativ können Sie der Funktion eine Logik hinzufügen, sodass ein leerer Login niemals akzeptiert wird.
- Um diesen Code ohne Fehler auszuführen, müssen Sie Lesezugriff auf haben
/the/file
. Wenn Sie dies jedoch haben, können Sie die Datei einfach lesen und alle Geheimnisse kennen. Ich werde das hier nicht beheben. Das sichere Speichern von Passwörtern geht über den Rahmen dieser Frage hinaus. Wenn Sie Passwörter lieber in die Shell-Datei selbst einbetten möchten, verwenden Siehier Dokument. Anstatt wie
done </the/file
folgt vorzugehen:done <<'EOF' kamil foo joe bar anotherUser pa$$word bill password that contains spaces EOF
Beachten Sie, dass das Zitieren des ersten
EOF
wichtig ist. Ohne es$$
würde es erweitert werden.