#! /bin/sh STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 STATE_DEPENDENT=4 print_revision() { echo "$1 v$2 (@PACKAGE@ @VERSION@)" printf '%b' "@WARRANTY@" } support() { printf '%b' "@SUPPORT@" } # # check_range takes a value and a range string, returning successfully if an # alert should be raised based on the range. Range values are inclusive. # Values may be integers or floats. # # Example usage: # # Generating an exit code of 1: # check_range 5 2:8 # # Generating an exit code of 0: # check_range 1 2:8 # check_range() { local v range yes no err decimal start end cmp match v="$1" range="$2" # whether to raise an alert or not yes=0 no=1 err=2 # regex to match a decimal number decimal="-?([0-9]+\.?[0-9]*|[0-9]*\.[0-9]+)" # compare numbers (including decimals), returning true/false cmp() { awk "BEGIN{ if ($1) exit(0); exit(1)}"; } # returns successfully if the string in the first argument matches the # regex in the second match() { echo "$1" | grep -E -q -- "$2"; } # make sure value is valid if ! match "$v" "^$decimal$"; then echo "${0##*/}: check_range: invalid value" >&2 unset -f cmp match return "$err" fi # make sure range is valid if ! match "$range" "^@?(~|$decimal)(:($decimal)?)?$"; then echo "${0##*/}: check_range: invalid range" >&2 unset -f cmp match return "$err" fi # check for leading @ char, which negates the range if match $range '^@'; then range=${range#@} yes=1 no=0 fi # parse the range string if ! match "$range" ':'; then start=0 end="$range" else start="${range%%:*}" end="${range#*:}" fi # do the comparison, taking positive ("") and negative infinity ("~") # into account if [ "$start" != "~" ] && [ "$end" != "" ]; then if cmp "$start <= $v" && cmp "$v <= $end"; then unset -f cmp match return "$no" else unset -f cmp match return "$yes" fi elif [ "$start" != "~" ] && [ "$end" = "" ]; then if cmp "$start <= $v"; then unset -f cmp match return "$no" else unset -f cmp match return "$yes" fi elif [ "$start" = "~" ] && [ "$end" != "" ]; then if cmp "$v <= $end"; then unset -f cmp match return "$no" else unset -f cmp match return "$yes" fi else unset -f cmp match return "$no" fi }