我有一个脚本要求用户输入用户名和密码。我想将输入与存储在passwords.txt文件中的用户名和密码变量进行比较。我尝试使用source,但它不允许我访问变量。以下是我的文件部分:
passwords.txt
#!/bin/bash
username="username"
password="password"
script.bash
#!/bin/bash
echo "Enter username"
read -r user
echo "Enter password"
read -r pass
source passwords.txt
if("$user" == "$username" && "$pass" == "$password") then
echo "You have successfully logged in"
else
echo "You entered the wrong credentials"
fi
如果可以的话,请帮我弄清楚如何比较不同文件中的两个变量。
答案 0 :(得分:5)
问题不在于采购,而在于if
声明的语法。
也就是说,在文件中存储纯文本密码并提示用户输入明显的密码是出于安全原因要避免的做法。
有了这个,这里是Bash代码,它显示了条件的正确形式:
echo "Enter username"
read -r user
echo "Enter password"
read -r pass
source passwords.txt
if [[ "$user" == "$username" && "$pass" == "$password" ]]; then
echo "You have successfully logged in"
else
echo "You entered the wrong credentials"
fi
通常,请考虑使用shellcheck.net在shell代码中查找语法问题。
在您的具体案例中,正如您在评论中指出的那样,shellcheck.net不会有帮助,但是:
(...)
作为传递给if
的条件原则上有效,用于执行命令,其退出代码需要测试(尽管包含在内) (...)
通常不需要 ,因为所有这一切都是在子shell 中运行命令。
相比之下,您希望评估表达式,这是[[ ... ]]
的语法 - 请参阅Bash manual online或CONDITIONAL EXPRESSIONS
部分man bash
1}}。