2016-04-24 39 views
1

我有一个脚本,要求用户输入用户名和密码。我想将输入与存储在passwords.txt文件中的用户名和密码变量进行比较。我尝试使用源代码,但它不允许我访问变量。这里是我下面的我的文件部分:从另一个bash脚本验证变量

password.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 

如果可以的话,请帮我找出如何将两个变量在不同的比较文件。

+2

“if”语句的语法不正确,这是您正在使用的实际代码吗? – cdarke

回答

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 EXPRESSIONSman bash

+2

很好回答,mklement0。阿什利,如果这是一个专业程序,你会希望通过教程或博客文章来了解如何在bash中处理安全密码。 – emery

+0

谢谢@ mklemento0现在这个作品!实际上,在我使用源代码之前,我通过shellcheck.net运行了代码,并没有给我任何错误。而且我知道这不是最佳实践,但是这是针对我正在完成的任务,这是所要求的问题的一部分。 – Ashley

+0

@Ashley很高兴听到它;重新使用shellcheck.net:理解 - 请参阅我的更新。 – mklement0