Bash scripting, multiple conditions in while loop
bash, loops, shell, while-loop
Solution
The correct options are (in increasing order of recommendation):
# Single POSIX test command with -o operator (not recommended anymore).
# Quotes strongly recommended to guard against empty or undefined variables.
while [ "$stats" -gt 300 -o "$stats" -eq 0 ]
# Two POSIX test commands joined in a list with ||.
# Quotes strongly recommended to guard against empty or undefined variables.
while [ "$stats" -gt 300 ] || [ "$stats" -eq 0 ]
# Two bash conditional expressions joined in a list with ||.
while [[ $stats -gt 300 ]] || [[ $stats -eq 0 ]]
# A single bash conditional expression with the || operator.
while [[ $stats -gt 300 || $stats -eq 0 ]]
# Two bash arithmetic expressions joined in a list with ||.
# $ optional, as a string can only be interpreted as a variable
while (( stats > 300 )) || (( stats == 0 ))
# And finally, a single bash arithmetic expression with the || operator.
# $ optional, as a string can only be interpreted as a variable
while (( stats > 300 || stats == 0 ))
Some notes:
Quoting the parameter expansions inside `[[ ... ]]` and `((...))` is optional; if the variable is not set, `-gt` and `-eq` will assume a value of 0.
Using `$` is optional inside `(( ... ))`, but using it can help avoid unintentional errors. If `stats` isn't set, then `(( stats > 300 ))` will assume `stats == 0`, but `(( $stats > 300 ))` will produce a syntax error.
Problem
I'm trying to get a simple while loop working in bash that uses two conditions, but after trying many different syntax from various forums, I can't stop throwing an error. Here is what I have: ``` while [ $stats -gt 300 ] -o [ $stats -eq 0 ] ``` I have also tried: ``` while [[ $stats -gt 300 ] || [ $stats -eq 0 ]] ``` ... as well as several others constructs. I want this loop to continue while `$stats is > 300` or if `$stats = 0`.