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
。但是,如果您有,您只需读取文件并了解所有秘密即可。我不会在这里解决这个问题。以安全的方式存储密码超出了问题的范围。 如果你喜欢在 shell 文件本身中嵌入密码,那么使用这里的文件. 而不是
done </the/file
像这样:done <<'EOF' kamil foo joe bar anotherUser pa$$word bill password that contains spaces EOF
注意引用第一条
EOF
很重要。没有它,内容$$
就会被扩展。