Bash If Statement With Multiple Conditions Throws An Error


Answer :

Use -a (for and) and -o (for or) operations.

tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

Update

Actually you could still use && and || with the -eq operation. So your script would be like this:

my_error_flag=1 my_error_flag_o=1 if [ $my_error_flag -eq 1 ] ||  [ $my_error_flag_o -eq 2 ] || ([ $my_error_flag -eq 1 ] && [ $my_error_flag_o -eq 2 ]); then       echo "$my_error_flag" else     echo "no flag" fi 

Although in your case you can discard the last two expressions and just stick with one or operation like this:

my_error_flag=1 my_error_flag_o=1 if [ $my_error_flag -eq 1 ] ||  [ $my_error_flag_o -eq 2 ]; then       echo "$my_error_flag" else     echo "no flag" fi 

You can use either [[ or (( keyword. When you use [[ keyword, you have to use string operators such as -eq, -lt. I think, (( is most preferred for arithmetic, because you can directly use operators such as ==, < and >.

Using [[ operator

a=$1 b=$2 if [[ a -eq 1 || b -eq 2 ]] || [[ a -eq 3 && b -eq 4 ]] then      echo "Error" else      echo "No Error" fi 

Using (( operator

a=$1 b=$2 if (( a == 1 || b == 2 )) || (( a == 3 && b == 4 )) then      echo "Error" else      echo "No Error" fi 

Do not use -a or -o operators Since it is not Portable.


Please try following

if ([ $dateR -ge 234 ] && [ $dateR -lt 238 ]) || ([ $dateR -ge 834 ] && [ $dateR -lt 838 ]) || ([ $dateR -ge 1434 ] && [ $dateR -lt 1438 ]) || ([ $dateR -ge 2034 ] && [ $dateR -lt 2038 ]) ; then     echo "WORKING" else     echo "Out of range!" 

Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?