Home > other >  My bash script verification code does not work
My bash script verification code does not work

Time:01-10

I am trying to write a program where the user can enter a username and password, then the code should check if the username and password are correct unfortunately whenever it checks no matter if the username/password is correct of not it will echo "Username Verified".

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

I have tired checking that all the variables work

CodePudding user response:

Unless username and correct_u consist solely of digits, [[ $username -eq $correct_u ]] will always evaluate to true, since -eq forces the arguments to be numbers, and if there are no number, the arguments are treated as zero.

To do a string comparision, do

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

Quoting the right-hand side is important here, to avoid that it is interpreted as glob-pattern, since == in general does a wildcard match.

CodePudding user response:

You should use = instead of -eq when comparing strings in bash. = is used for string comparison while -eq is used for integer comparison:

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

CodePudding user response:

Embedding your name & pw in cleartext in the file isn't ideal. The user ID must be able to read it to execute the commands in it; executable permissions won't help if you take away read.

Use that to your advantage. Set the user/group/world permissions appropriately. Then the user and password are entered at login...

You might want to combine methods from here and here, reading the right password securely from a vault file and comparing that to the one you read silently from the user.

But first, as already mentioned - fix your test.

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

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

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