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
很重要。沒有它$$
就會擴大。