I have a variable called choice
. Now, I try to use if to compare the entered value:
read $choice
if [ "$choice" == 2 ];then
#do something
elif [ "$choice" == 1 ];then
#do something else
else
echo "Invalid choice!!"
fi
The output goes directly to invalid choice if I enter either 1 or 2. I tried to put quotes around 1 and 2 inside the if statement. Still didn't work. Using -eq
gives me an error "Unary operator expected".What am I doing wrong here?
Your read
line is incorrect. Change it to:
read choice
i.e. use the name of the variable you want to set, not its value.
-eq
is the correct test to compare integers. See man test
for the descriptions (or man bash
).
An alternative would be using arithmetic evaluation instead (but you still need the correct read
statement):
read choice
if (( $choice == 2 )) ; then
echo 2
elif (( $choice == 1 )) ; then
echo 1
else
echo "Invalid choice!!"
fi
For your example, case
seems to be what you probably want:
read choice
case "$choice" in
"1")
echo choice 1;
;;
"2")
echo choice 2;
;;
*)
echo "invalid choice"
;;
esac
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With