shell 我的bash脚本验证码不工作

zbsbpyhn  于 2023-01-13  发布在  Shell
关注(0)|答案(3)|浏览(116)

我试图写一个程序,用户可以输入用户名和密码,然后代码应该检查用户名和密码是否正确不幸的是,每当它检查无论用户名/密码是否正确,它都会回显“用户名验证”。

#!/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

我已经厌倦了检查所有变量是否有效

ijxebb2r

ijxebb2r1#

除非usernamecorrect_u仅由数字组成,否则[[ $username -eq $correct_u ]]将始终计算为 true,因为-eq强制参数为数字,如果没有数字,则将参数视为零。
若要执行字符串比较,请执行

[[ $username == "$correct_u" ]]

在这里,引用右边的代码很重要,以避免它被解释为全局模式,因为==通常进行通配符匹配。

mtb9vblg

mtb9vblg2#

在bash中比较字符串时,应该使用=而不是-eq=用于字符串比较,而-eq用于整数比较:

#!/bin/bash
echo "Username"  
read username  
echo "Password"
read password
sleep 1
correct_u=user
correct_p=pass
if [[ "$username" = "$correct_u" ]]
then
  echo "Username Verified..."
else 
  echo "Username Incorrect..."
fi
sleep 1
if [[ "$correct_p" = "$password" ]]
then 
  sleep 1
  echo "Password Verified..."
else 
  echo "Password Incorrect..."
fi
9jyewag0

9jyewag03#

将你的名字& pw嵌入文件的明文中并不理想,用户ID必须能够读取它来执行其中的命令;可执行权限将不会有帮助,如果你拿走读取。
利用这一点。适当地设置用户/组/世界权限。然后在登录时输入用户和密码...
您可能需要合并herehere中的方法,从Vault文件中安全地阅读正确的密码,并将其与您从用户处“静默”读取的密码进行比较。
但是首先,正如已经提到的,修改您的测试。

$: [[ "one" -eq "two" ]] && echo same || echo no
same

$: [[ "one" == "two" ]] && echo same || echo no
no

$: [[ "one" == "one" ]] && echo same || echo no
same

相关问题