このbashスクリプトは、特定のOIDのネットワーク範囲を照会し、結果を返します。
#!/bin/bash
# snmpget command query the network range for target OIDs
for (( i=254; $i; i=$i-1 )) do host=10.250.53.$i; snmpget -v 2c -c public -t 0.5 -r 1 $host iso.3.6.1.2.1.1.1.0; done; read -p 'press Enter to continue...'
このOID(sysDescr)に特定のSW_REV文字列が含まれている場合に結果のみを返すように変更するにはどうすればよいですか?つまり、SW_REV: r4000-d7000r1037-993021u;
バージョンが異なる場合、アドレスは無視されます。
答え1
snmpget
単にフィルタ出力にコマンドを追加できます。例えばgrep
:
for (( i=254; $i; i=$i-1 )) do
host=10.250.53.$i
snmpget -v 2c -c public -t 0.5 -r 1 $host iso.3.6.1.2.1.1.1.0 | grep r4000-d7000r1037-993021u
done
read -p 'press Enter to continue...'
目標がIPアドレスのみを検索する場合(出力が何であるかわからないsnmpget
)、文字列が一致するかどうかをテストし(使用してgrep -q
)、一致する場合はIPアドレスのみを表示できます。
for (( i=254; $i; i=$i-1 )) do
host=10.250.53.$i
if snmpget -v 2c -c public -t 0.5 -r 1 $host iso.3.6.1.2.1.1.1.0 | grep -q r4000-d7000r1037-993021u; then
echo $host
fi
done
read -p 'press Enter to continue...'