#!/bin/bash # - VAR # - Bash info APPNAME=$(basename $0) NAME="Check Switch HPE OfficeConnect 1920s" AUTHOR="Kalarumeth" VERSION="v0.1" URL="https://github.com/Kalarumeth" # - Default settings for connection COMMUNITY="public" HOST_NAME="localhost" SNMPVERSION="2c" # - State Variables STATE_OK=0 STATE_WARN=1 STATE_CRIT=2 STATE_UNK=3 STATE=$STATE_OK # - OID HPE.OIDS() { #Info OID_sysDescr="1.3.6.1.2.1.1.1.0" OID_sysUptimeIstance="1.3.6.1.2.1.1.3" OID_sysSerial="1.3.6.1.2.1.47.1.1.1.1.11.1" OID_sysMacAddres="1.3.6.1.2.1.67.1.2.1.1.2.0" #interface OID_ifName="1.3.6.1.2.1.31.1.1.1.1" OID_ifInErrors="1.3.6.1.2.1.2.2.1.14" OID_ifOutErrors="1.3.6.1.2.1.2.2.1.20" #Vlan OID_vlanID="1.3.6.1.2.1.17.7.1.4.2.1.3.0" OID_vlanName="1.3.6.1.2.1.17.7.1.4.3.1.1" OID_vlanEntry="1.3.6.1.2.1.17.7.1.2.1.1.2" } # - MAIN CODE Script.HostAlive() { for server in $HOST_NAME; do ping -c1 -W1 -q $server &>/dev/null if [[ $? != 0 ]] ; then printf "%s\n" "$server is unreachable" exit $STATE_UNK fi done } Script.SNMP() { snmpwalk -v $SNMPVERSION -r 1 -t 10 -Oe -c $COMMUNITY $HOST_NAME $1 } Script.SNMP.Hex() { snmpwalk -v $SNMPVERSION -r 1 -t 10 -Oa -c $COMMUNITY $HOST_NAME $1 } # - Switch HPE OfficeConnect 1920s Health Check HPE.Main() { Script.HostAlive case $1 in info) HPE.Info exit $STATE ;; if) HPE.Interface exit $STATE ;; vlan) HPE.Vlan exit $STATE ;; *) echo "Unknown check!" Help.HPE exit $STATE_UNK ;; esac } HPE.GetData() { HPE.OIDS case $1 in info) raw_sysDescr=$(Script.SNMP $OID_sysDescr | cut -d '"' -f 2) IFS=',' read -ra sysDescr <<< $raw_sysDescr; sysUptimeIstance=$(Script.SNMP $OID_sysUptimeIstance | cut -d ')' -f 2 ) sysSerial=$(Script.SNMP $OID_sysSerial | cut -d '"' -f 2) sysMacAddres=$(Script.SNMP $OID_sysMacAddres | cut -d '"' -f 2);; interface) raw_ifName=$(Script.SNMP $OID_ifName | cut -d ' ' -f 4) raw_ifInErrors=$(Script.SNMP $OID_ifInErrors | cut -d ' ' -f 4) raw_ifOutErrors=$(Script.SNMP $OID_ifOutErrors | cut -d ' ' -f 4) readarray -t ifName <<< $raw_ifName readarray -t ifInErrors <<< $raw_ifInErrors readarray -t ifOutErrors <<< $raw_ifOutErrors ;; vlan) raw_vlanID=$(Script.SNMP $OID_vlanID | cut -d ' ' -f 4 | sed "s/$//g") raw_vlanName=$(Script.SNMP $OID_vlanName | cut -d '"' -f 2 | sed "s/$//g") raw_vlanEntry=$(Script.SNMP $OID_vlanEntry | cut -d ' ' -f 4 | sed "s/$//g") readarray -t vlanID <<< $raw_vlanID readarray -t vlanName <<< $raw_vlanName readarray -t vlanEntry <<< $raw_vlanEntry ;; esac } HPE.Info() { HPE.GetData info printf "%s\n\n" "${sysDescr[0]}" printf "%s\t%s\n" "UpTime:" "$sysUptimeIstance" printf "%s\t%s\n" "S/N:" " $sysSerial" printf "%s\t%s\n" "Relase:" "${sysDescr[1]}" printf "%s\t%s\n" "Os:" "${sysDescr[2]}" printf "%s\t%s\n" "Bios:" "${sysDescr[3]}" printf "%s\t%s\n" "Mac:" " $sysMacAddres" } HPE.Interface() { HPE.GetData interface ErrorCounter=0 for ((i=0; i<${#ifName[@]}; i++)); do if [[ ${ifInErrors[$i]} != 0 || ${ifOutErrors[$i]} != 0 ]]; then ErrorCounter=$((ErrorCounter + 1)) fi done for Error in "$ErrorCounter"; do if [[ $Error == 0 ]] ; then printf "%s\t%s\n\n" "OK!" "All interface operating normally." break else printf "%s\n\n" "Warn! $ErrorCounter inteface have error." printf "%s\t%s\t%s\n" "InEr" "OutEr" "If" printf "%s\n" "=========================" for ((i=0; i<${#ifName[@]}; i++)); do if [[ ${ifInErrors[$i]} != 0 || ${ifOutErrors[$i]} != 0 ]] ; then printf "%s\t%s\t%s\n" "${ifInErrors[$i]}" "${ifOutErrors[$i]}" "${ifName[$i]}" fi done STATE=$STATE_WARN break fi done } HPE.Vlan() { HPE.GetData vlan printf "%s\n\n" "${#vlanID[@]} Exist Vlan" printf "%s\t%s\t%s\n" "ID" "Entry" "Name" printf "%s\n" "=============================" for ((i=0; i<${#vlanID[@]}; i++)) do printf "%s\t%s\t%s\n" "${vlanID[$i]}" "${vlanEntry[$i]}" "${vlanName[$i]}" done } # - Help Help.Main() { echo $NAME echo '' Help.Usage echo '' Help.Option echo '' Help.Info echo '' exit $STATE_UNK } Help.Usage() { printf "%s\n" "Method to compose the execution string" printf "%s\n" "./$APPNAME -c -h " } Help.Option() { printf "%s\n" "OPTIONS:" printf "%s\t%s\t%s\n\t\t\t%s\n" "-c" "--community" "SNMP v2 community string with Read access." " Default is $COMMUNITY." printf "%s\t%s\t\t%s\n\t\t\t%s\n" "-h" "--host" "Host name or IP address to check." " Default is $HOST_NAME." printf "%s\t%s\t\t%s\n" "-H" "--help" "Show script help" printf "%s\t%s\t%s\n" "-V" "--version" "Show script version" } Help.HPE() { printf "\n%s\n\n" "HPE OfficeConnect 1920s Check Function" printf "%s\t%s\n\n" "Check" "Description" printf "%s\t%s\n" "info" "Print Switch basic information" printf "%s\t%s\n" "if" "Monitoring interface" printf "%s\t%s\n" "vlan" "Monitoring Vlan" } Help.Info() { printf "%s\t%s\t%s\n" "INFO:" "$NAME" "$VERSION" "" "$AUTHOR" "$URL" } # - COMMAND LINE ENCODER while test -n "$1"; do case "$1" in --host | -h) HOST_NAME=$2 shift ;; --comunity | -c) COMMUNITY=$2 shift ;; --type | -t) HPE.Main $2 shift ;; --help | -H) Help.Main ;; --version | -V) Help.Info exit $STATE ;; *) echo "Unknown argument: $1" print_help exit $STATE_UNK ;; esac shift done HPE.Main