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
Post a Comment