Clone
1
SC2334
Vidar Holen edited this page 2025-05-16 18:24:23 -07:00

You probably wanted || here, otherwise it's always false.

Problematic code:

if (( ret == 137 && ret == 143 ))
then
  echo "Process killed by SIGTERM/SIGKILL"
fi

Correct code:

if (( ret == 137 || ret == 143 ))
then
  echo "Process killed by SIGTERM/SIGKILL"
fi

Rationale:

The problematic condition will never trigger because of a logic error.

In English one think say "I want to check for the numbers 137 and 143", but the test ends up checking that the number is both 137 and 143 at the same time, which it can't be (if the number is 137, it necessarily won't be 143, and vice versa).

The correct check is "if the number is 137 or if the number is 143", which will be true if the value is either 137 or 143.

Exceptions:

None

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!