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

Chemistry - Bond Angles In NH3 And NCl3

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Change The Font Size Of Visual Studio Solution Explorer