Я пытаюсь написать bash-скрипт, который собирает информацию через SNMPv3 и генерирует шаблон конфигурации для данного устройства.
Моя цель - создать шаблон на основе переменных mibnumberX и interfaceX, где X - это число, определяемое пользовательским вводом (например, сколько интерфейсов вы хотите добавить? как называются интерфейсы?)
#!/bin/bash
# Ambiguously defined variables for the sake of demonstration:
authpriv="authPriv"
devicetype="ASA"
snmpuser="username"
authhash="SHA"
authstring="authpassword"
privhash="AES"
privstring="privpassword"
ipaddress="1.1.1.1"
interface1="Inside"
interface2="Outside"
numberofifs="2"
defaultasa="yes"
# Determine how many interfaces are to be added and what their friendly names are
if [[ $defaultasa = "yes" ]];
then
read -p "How many interfaces would you like to add to monitoring for this device? " numberofifs
for ((i = 1; i <= numberofifs; i++))
do
read -p "Please enter the name of interface number ${i} and press [ENTER]: " interface${i}
done
fi
# Walk the ifDescr MIBs, grep with the friendly name of the interface(s) and store the last number of IF-MIB::ifDescr.16 in *mibnumberX*.
if [[ $authpriv = "authPriv" ]] && [[ $devicetype = "ASA" ]];
then
for ((i = 1; i <= numberofifs; i++))
do
eval "ifnumber=\$interface$i"
eval "mibnumber$i=$(snmpwalk -v3 -u $snmpuser -l AuthPriv -a $authhash -A $authstring -x $privhash -X $privstring $ipaddress ifD | grep -i $ifnumber | awk -F"[<.=>]" '{print $2}')"
done
fi
# Display interface names and MIBs
printf "Name: $interface1\n MIB number: $mibnumber1\nName: $interface2\n MIB Number: $mibnumber2\n"
Результаты скрипта:
$ ./test.sh
Name: Inside
MIB number: 15
Name: Outside
MIB Number: 16
Намерение состоит в том, чтобы циклически перебирать переменные mibnumberX и interfaceX и распечатывать следующий шаблон с разбросанными на них данными о том, добавляются ли два интерфейса или двести.
if [[ $authpriv = "authPriv" ]];
then
for ((i = 1; i <= numberofifs; i++))
do
printf "\ndefine service{
service_description Interface $interface$i
check_command check_snmp_V3-2!$snmpuser!$authstring!$privhash!$privstring!$authpriv!$authhash!.1.3.6.1.2.1.2.2.1.8.$mibnumber${i}!-r 1 -m RFC1213-MIB!-l Interface \n} \n\n"
done
fi
Однако вывод этого раздела не дает такой удачи:
$ ./test.sh
Name: Inside
MIB number: 15
Name: Outside
MIB Number: 16
define service{
service_description Interface 1
check_command check_snmp_V3-2!username!authpassword!AES!privpassword!authPriv!SHA!.1.3.6.1.2.1.2.2.1.8.1!-r 1 -m RFC1213-MIB!-l Interface
}
define service{
service_description Interface 2
check_command check_snmp_V3-2!username!authpassword!AES!privpassword!authPriv!SHA!.1.3.6.1.2.1.2.2.1.8.2!-r 1 -m RFC1213-MIB!-l Interface
}
Я новичок, экспериментирующий с bash, и я открыт для любых предложений.