我如何在此处添加更多用户名和密码?

我如何在此处添加更多用户名和密码?

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很重要。没有它,内容$$就会被扩展。

相关内容