Can I put more than 1 condition in if?

6,650

Solution 1

With [ expression ] (POSIX Standard) syntax you can use the following:

if [ "$name" != "$blank" ] && [ "$age" = "$blank" ]; then
   echo true
fi

But in [[ expression ]] syntax you can use both conditions:

if [[ $name != "$blank" && $age == "$blank" ]]; then
   echo true!
fi

Two advantages of [[ over [:

  1. No word splitting or glob expansion will be done for [[, and therefore many arguments need not be quoted (with the exception of the right-hand side of == and !=, which is interpreted as a pattern if it isn't quoted).
  2. [[ easier to use and less error-prone.

Downside of [[: it is only supported in ksh, bash and zsh, not in plain Bourne/POSIX sh.

My reference and good page to comparing [[ and [: bash FAQ

Security implications of forgetting to quote a variable in bash/POSIX shells

Solution 2

Yet another possibility not mentioned by @SepahradSalour is to use -a operator:

if [ "$name" != "$blank" -a "$age" = "$blank" ]; then

BTW, be sure to quote properly all variables separately.

Share:
6,650

Related videos on Youtube

Zac
Author by

Zac

Updated on September 18, 2022

Comments

  • Zac
    Zac almost 2 years

    Is it possible to put more than 1 condition in an if statement?

    if  [ "$name" != "$blank" && "$age" == "$blank" ]; then
    

    Is it possible? If not how am I supposed to do that?

    • Aman
      Aman over 9 years
      also has an answer here
  • mikeserv
    mikeserv over 9 years
    According to spec The XSI extensions specifying the -a and -o binary primaries and the '(' and ')' operators have been marked obsolescent. (Many expressions using them are ambiguously defined by the grammar depending on the specific expressions being evaluated.)
  • jimmij
    jimmij over 9 years
    @mikeserv Interesting, I didn't know that.
  • Sepahrad Salour
    Sepahrad Salour over 9 years
    @mikeserv, Thank for your attention. I edited my post.
  • Peter Cordes
    Peter Cordes over 9 years
    You mention that [ is POSIX standard. It's worth pointing out that [[ isn't. But if you're using other BASH features anyway, then def. use [[, it's better. (e.g. the bash-completion project coding standards mandate use of [[ ]].)
  • Pj Rigor
    Pj Rigor over 9 years
    I suggest you modify the answer to include the comment from @mikeserv