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 [
:
- 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). -
[[
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.
Related videos on Youtube
Author by
Zac
Updated on September 18, 2022Comments
-
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 over 9 yearsalso has an answer here
-
-
mikeserv over 9 yearsAccording 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 over 9 years@mikeserv Interesting, I didn't know that.
-
Sepahrad Salour over 9 years@mikeserv, Thank for your attention. I edited my post.
-
Peter Cordes over 9 yearsYou 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 over 9 yearsI suggest you modify the answer to include the comment from @mikeserv