Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using compound conditions in bash shell script

I want to do something like below in Bash script. How do I implement it in Bash syntax?

if !((a==b) && (a==c))
then
    # Do something
end if
like image 478
Sanjan Grero Avatar asked Jan 27 '11 02:01

Sanjan Grero


People also ask

How do you use multiple IF statements in shell script?

To use multiple conditions in one if-else block, then elif keyword is used in shell. If expression1 is true then it executes statement 1 and 2, and this process continues. If none of the condition is true then it processes else part.

What does %% mean in bash?

So as far as I can tell, %% doesn't have any special meaning in a bash function name. It would be just like using XX instead. This is despite the definition of a name in the manpage: name A word consisting only of alphanumeric characters and under- scores, and beginning with an alphabetic character or an under- score.

What is && and || in shell script?

The operators "&&" and "||" shall have equal precedence and shall be evaluated with left associativity. For example, both of the following commands write solely bar to standard output: $ false && echo foo || echo bar $ true || echo foo && echo bar.


1 Answers

For numeric comparison, you can do:

if ! (( (a == b) && (a == c) ))

For string comparison:

if ! [[ "$a" == "$b" && "$a" == "$c" ]]

In Bash, the double parentheses set up an arithmetic context (in which dollar signs are mostly optional, by the way) for a comparison (also used in for ((i=0; i<=10; i++)) and $(()) arithmetic expansion) and is used to distinguish the sequence from a set of single parentheses which creates a subshell.

This, for example, executes the command true and, since it's always true it does the action:

if (true); then echo hi; fi 

This is the same as

if true; then echo hi; fi

except that a subshell is created. However, if ((true)) tests the value of a variable named "true".

If you were to include a dollar sign, then "$true" would unambiguously be a variable, but the if behavior with single parentheses (or without parentheses) would change.

if ($true)

or

if $true

would execute the contents of the variable as a command and execute the conditional action based on the command's exit value (or give a "command not found" message if the contents aren't a valid command).

if (($true)) 

does the same thing as if ((true)) as described above.

like image 154
Dennis Williamson Avatar answered Oct 23 '22 11:10

Dennis Williamson