I was skimming through an /etc/rc.d/init.d/sendmail file (I know this is hardly ever used, but I'm studying for an exam), and I've become a bit confused about the && and the || operators.  I've read where they can be used in statements such as:if [ test1 ] && [ test2 ]; then     echo both tests are trueelif [ test1 ] || [ test2 ]; then     echo one test is truefiHowever, this script shows single line statements such as:[ -z $SMQUEUE ] && SMQUEUE=QUEUE[ -f /usr/sbin/sendmail ] || exit 0These seem to be using the && and || operators to elicit responses based on tests, but I haven't been able to dig up documenation regarding this particular use of these operators.  Can anyone explain what these do in this particular context?
Confusing use of && and || operators
bash;shell;scripting;control flow
The right side of && will only be evaluated if the exit status of the left side is zero. || is the opposite: it will evaluate the right side only if the left side exit status is nonzero.You can consider [ ... ] to be a program with a return value. If the test inside evaluates to true, it returns zero; it returns nonzero otherwise.Examples:$ false && echo howdy!$ true && echo howdy!howdy!$ true || echo howdy!$ false || echo howdy!howdy!Extra notes:If you do which [, you might see that [ actually does point to a program! It's usually not actually the one that runs in scripts, though; run type [ to see what actually gets run. If you wan to try using the program, just give the full path like so: /bin/[ 1 = 1.