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
コメントの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
重要です。これがないと、$$
拡張されてしまいます。