我试图写一个程序,用户可以输入用户名和密码,然后代码应该检查用户名和密码是否正确不幸的是,每当它检查无论用户名/密码是否正确,它都会回显“用户名验证”。
#!/bin/bash
echo "Username"
read username
echo "Password"
read password
sleep 1
correct_u=user
correct_p=pass
if [[ $username -eq $correct_u ]]
then
echo "Username Verified..."
else
echo "Username Incorect..."
fi
sleep 1
if [[ $correct_p -eq $password ]]
then
sleep 1
echo "Password Verified..."
else
echo "Password Incorect..."
fi
我已经厌倦了检查所有变量是否有效
3条答案
按热度按时间ijxebb2r1#
除非
username
和correct_u
仅由数字组成,否则[[ $username -eq $correct_u ]]
将始终计算为 true,因为-eq
强制参数为数字,如果没有数字,则将参数视为零。若要执行字符串比较,请执行
在这里,引用右边的代码很重要,以避免它被解释为全局模式,因为
==
通常进行通配符匹配。mtb9vblg2#
在bash中比较字符串时,应该使用
=
而不是-eq
。=
用于字符串比较,而-eq
用于整数比较:9jyewag03#
将你的名字& pw嵌入文件的明文中并不理想,用户ID必须能够读取它来执行其中的命令;可执行权限将不会有帮助,如果你拿走读取。
利用这一点。适当地设置用户/组/世界权限。然后在登录时输入用户和密码...
您可能需要合并here和here中的方法,从Vault文件中安全地阅读正确的密码,并将其与您从用户处“静默”读取的密码进行比较。
但是首先,正如已经提到的,修改您的测试。