[ :Unexpected operator in shell programming [duplicate]
My code:
#!/bin/sh
#filename:choose.sh
read choose
[ "$choose" == "y" -o "$choose" == "Y" ] && echo "Yes" && exit 0
[ "$choose" == "n" -o "$choose" == "N" ] && echo "No" && exit 0
echo "Wrong Input" && exit 0
But when I execute
sh ./choose.sh
terminal prompt me that
[: 4: n: :Unexpected operator
[: 5: n: :Unexpected operator
Is there any mistake in my bash script? Thanks!
Solution 1:
There is no mistake in your bash script. But you are executing it with sh which has a less extensive syntax ;)
So, run bash ./choose.sh
instead :)
Solution 2:
POSIX sh doesn't understand ==
for string equality, as that is a bash-ism. Use =
instead.
The other people saying that brackets aren't supported by sh are wrong, btw.
Solution 3:
To execute it with Bash, use #!/bin/bash and chmod it to be executable, then use
./choose.sh
Solution 4:
you can use case/esac instead of if/else
case "$choose" in
[yY]) echo "Yes" && exit;;
[nN]) echo "No" && exit;;
* ) echo "wrong input" && exit;;
esac
Solution 5:
you have to use bash instead or rewrite your script using standard sh
sh -c 'test "$choose" = "y" -o "$choose" = "Y"'