I am trying to write my shell script thing.sh
so that upon making it an executable and running it with the single letter ``A" like so:
$ ./thing.sh A
I get the output
A
If argument 1 is not A, I want the output
Not A
Here is my code so far :
#!/bin/bash
if [ "$1" -eq "A"]
then echo "A"
else echo "Not A"
fi
which returns, no matter what I enter,
./thing.sh: line 3: [:missing `]'
Not A
I am trying what I hoped would check something with one or several letters and compare it against the letter A; could someone tell me what I am missing to get this to work? Thank you
What about the shorter :
#!/bin/bash
[[ $1 == A ]] && echo "A" || echo "not A"
?
And a beginner version (identical logic) :
#!/bin/bash
if [[ $1 == A ]]; then
echo "A"
else
echo "not A"
fi
Like Scott said, you have a syntax error (missing space).
explanations
- I use boolean logic here.
[[ $1 == A ]]
is executed, and then if its true, echo "A"
is executed, and if it's false, echo "not A"
is executed, See http://mywiki.wooledge.org/BashGuide/TestsAndConditionals
[[
is a bash keyword similar to (but more powerful than) the [
command. See http://mywiki.wooledge.org/BashFAQ/031 and http://mywiki.wooledge.org/BashGuide/TestsAndConditionals Unless you're writing for POSIX sh, I recommend [[
.
Change the first line to:
if [ "$1" == "A" ]
The -eq operator is for integers. And as someone else mentioned, the space does matter before the ']'.
See here: http://tldp.org/LDP/abs/html/comparison-ops.html
Try putting a space between "A"
and ]
.
You need a space after "A"
if [ "$1" -eq "A" ]