In the process of writing a shell script, I ran into an issue with the following if/else statement that falls somewhere in the middle of the script:

if [ $act -eq "add" ]
    read - "add or update: " $comm
    git commit -m "$comm $file"
    git commit -m "$act $file"

The returning error being:

./gitup: line 13: [: add: integer expression expected

and then proceeds with the rest of the script. How can I have the if segment evaluate/compare the variable to a string input rather than an integer; a different error was required when using "!=" among a couple of other things I tried.


Something like this:

if [[ $act = "add" ]]
    echo good
    echo not good

-eq is for number comparison, use = for string comparison

  • Thanks. I had tried that, and the script would free, requiring a keystroke, but just found it was caused by an unrelated syntax error further down, so this worked perfectly. Thanks for the help. Jan 30 '13 at 4:57
  • 4
    @josephmarhee: Note that the [[]] test is a Bash specific construct, and this example works just as well with the POSIX [] as used in the question. If the interpreter is explicitly given as #!/bin/bash or similar, the [[]] can be used without issues (and it is a bit faster than the alternative in Bash, I believe - not that it should be a bottle neck anyway), otherwise one should stick with []. If one doesn't need Bash specifics at all, the script will run a bit faster in e.g. Dash. And POSIX ensures inherent portability. Jan 30 '13 at 9:28

This method would also work. Very similar to @Guru's answer but removes the need for double square brackets.

if [ "$act" == "add" ]
echo "Good!"
      echo "Not good!"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.