Содержимое файла bash будет замаскировано.
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
решение1
В одном из комментариев говорится:
Создать текстовый файл с именами пользователей и паролями. И через цикл проверить их из файла.
Это хорошая идея. Код может быть таким:
#!/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
Пример /the/file
:
kamil foo
joe bar
anotherUser pa$$word
bill password that contains spaces
Все, что находится после первого пробела в строке, является паролем.
Примечания:
- Это можно сделать без функции. Функция здесь весьма полезна из-за своей способности
return 0
(успеха) из середины цикла без дополнительной логики. - Пустая строка означает пустой логин и пустой пароль. Обратите внимание, что в *nix каждая строка в текстовом файле должна заканчиваться символом новой строки, поэтому символ новой строки в самом конце файла не означает, что после него есть пустая строка. Тем не менее, довольно легко поместить действительно пустую строку в конец, поэтому будьте внимательны. В качестве альтернативы вы можете добавить некоторую логику в функцию, так что пустой логин никогда не будет принят.
- Чтобы запустить этот код без ошибок, вам нужно иметь доступ на чтение к
/the/file
. Но если у вас есть доступ, вы можете просто прочитать файл и узнать все секреты. Я не буду это здесь исправлять. Хранение паролей в безопасном режиме выходит за рамки вопроса. Если вы предпочитаете встраивать пароли в сам файл оболочки, то используйтездесь документ. Вместо того, чтобы
done </the/file
делать как:done <<'EOF' kamil foo joe bar anotherUser pa$$word bill password that contains spaces EOF
Примечание: цитирование первого
EOF
важно. Без него$$
было бы расширено.