Bash if statement with multiple conditions throws an error Bash if statement with multiple conditions throws an error bash bash

Bash if statement with multiple conditions throws an error


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=1my_error_flag_o=1if [ $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=1my_error_flag_o=1if [ $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=$1b=$2if [[ a -eq 1 || b -eq 2 ]] || [[ a -eq 3 && b -eq 4 ]]then     echo "Error"else     echo "No Error"fi

Using (( operator

a=$1b=$2if (( 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!"