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!
you can use case/esac instead of if/else
Do not use any reserved keyword as the start of any variable name: eg HOSTNAME will fail as HOST {TYPE|NAME} are reserved
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.
In fact the "[" square opening bracket is just an internal shell alias for the test command.
So you can say:
or
... they are equivalent in either sh or bash. Note the requirement to have a closing "]" bracket on the "[" command but other than that "[" is the same as "test". "man test" is a good thing to read.
you have to use bash instead or rewrite your script using standard sh
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 :)