Conditions and ranges within case statements in bash
You cannot express number ranges easily in the case
expressions - the pattern [1000-9999]
, for example, does not mean the numbers 1000
to 9999
, but the characters 1
, 0
, 0
, the range 0-9
, the characters 9
, 9
, 9
- essentially all the digits. [1-85]
does not mean the numbers 1
to 85
, but the digits from 1
to 8
, and 5
, ... which are just the digits from 1
to 8
. So [1-20]*
means anything that begins with 1
, 2
, or 0
- so even 20000000
will match that. Use if
/then
/elif
/else
/fi
instead:
if (( $SECURITY_PACKAGES == 0 ))
then
echo "OK - not bad: There are a total of $TOTAL_PACKAGES packages to upgrade in this server, but none of them are security updates!"
exit 0
elif (( $SECURITY_PACKAGES <= 20 ))
then
echo "WARNING - $TOTAL_PACKAGES packages required to upgrade in this server, of which $SECURITY_PACKAGES are security updates"
exit 1
elif (( $SECURITY_PACKAGES <= 9999 ))
then
echo "CRITICAL - $SECURITY_PACKAGES out of $TOTAL_PACKAGES are security updates! Consider upgrading soon!"
exit 2
else
echo "UNKNOWN - I am not sure what's happening now, check later or check server: $TOTAL_PACKAGES to upgrade, $SECURITY_PACKAGES are security updates"
exit 3
fi