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