私は自宅でいくつかの簡単な監視ツールを実行することに取り組んできましたが、冗談を言って、他のすべてのものと一緒にプリンターデータを取得することにしましたが、SNMP 部分が非常にうまく機能するようになったので、できるようになりました。 Linux で SNMPGET コマンドが取得したデータを正しく解析できないようです。現在使用しているスクリプトは次のとおりです。
#!/usr/bin/env bash
# RegEx for Strings: "(.+?)"| -?\d+
RegExStr='"(.+?)"| -?\d+'
# ***
# Brother HL-2150N Printer
# ***
# Order Data: Toner Naame, Toner Level, Drum Name, Drum Status, Total Pages Printer, Display Status
Input=$(snmpget -v 1 -c public 192.168.16.112 SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 SNMPv2-SMI::mib-2.43.11.1.1.8.1.1 SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 SNMPv2-SMI::mib- 2.43.11.1.1.9.1.1 SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 -m BROTHER-MIB)
Output1=( $(echo $Input | egrep -o $RegExStr) )
# Output
echo $Input
echo ${Output1[@]}
奇妙なことに、これは機能しません。さまざまな構文チェッカーとテスターで何度もテストしたため、正規表現 ( "(.+?)" ) が正しいと確信しています。引用符 ("") で囲まれたすべてのデータを選択することになっています。
とにかく、SNMPGET の戻り値は次のとおりです。
SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: "Black Toner Cartridge" SNMPv2-SMI::mib-2.43.11.1.1.8.1.1 = INTEGER: -2 SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 = STRING: "Drum Unit" SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: -3 SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 = Counter32: 13630 SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 = STRING: "SLAAP "
私は自分でさまざまなことを試しましたが、grepを使用すると空白の文字列が返されます。私の理解では、 grepはすべての正規表現コマンドを単独でサポートしているわけではないため、egrepを使い始めました。
足りないものはありますか?私は周りを見回し、メソッドを数回調整しましたが、見返りに使用可能な配列を取得したようには見えませんでした。
とにかく、あなたが私に与えることができる助け/指針に感謝します。楽しみと良い学習体験のためだけでも、これを実行できるようにしたいと思います。よろしくお願いします!私はそれを自分でもう少しそわそわしますが、時々ここをチェックします。