![Как мне добавить сюда больше имен пользователей и паролей?](https://rvso.com/image/1615468/%D0%9A%D0%B0%D0%BA%20%D0%BC%D0%BD%D0%B5%20%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%81%D1%8E%D0%B4%D0%B0%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B5%20%D0%B8%D0%BC%D0%B5%D0%BD%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9%20%D0%B8%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%B9%3F.png)
Содержимое файла 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
важно. Без него$$
было бы расширено.