0

ファイルにsnmpgetしたいIPのリストがあります。ファイルへの出力の書き込みに問題があります。

 OID=1.3.6.1.2.1.25.3.2.1.3.1
 cat printers.csv | while read IP ; do
        OUT=$(snmpget -v1 -c public $IP $OID)
        printf '%s, %s\n' $IP $OUT >> printerNames.csv
 done

私はprintfコマンドが初めてです。bc の出力が間違って書き込まれているのは、そこにあると思います。また、応答がない場合はコンソールにエコーし、出力ファイルに書き込みたいと思います。どんな助けでも大歓迎です。

4

1 に答える 1

1

これを試して:

OID=1.3.6.1.2.1.25.3.2.1.3.1
while read IP ; do
    OUT=$(snmpget -v1 -c public "$IP" "$OID") && printf '%s, %s\n' "$IP" "$OUT"
done < printers.csv 2>&1 > printerNames.csv

正当な理由がない限り、常にパラメーター展開を引用することをお勧めします。リダイレクトはwhileループに適用されます。read入力ファイルから一度に 1 行ずつ読み取ります (cat不要)。標準エラーに書き込まれたものはすべて標準出力にコピーされ、標準出力 (エラーを含む) は出力ファイルにリダイレクトされます。コマンドが成功したprintf場合にのみ実行されますsnmpget(ルックアップが失敗した場合、ゼロ以外の終了ステータスがあると想定していますが、そうではない場合があります)。


printers.csvDOS の行末 ( )があるように聞こえ\r\nます。キャリッジ リターンは、各行の最後の文字として含まれます。を印刷する$IPと、アドレス、次に改行が印刷され、カーソルが行の先頭に戻ります。これにより、行の残り ( , $OUT) でアドレスが上書きされます。キャリッジ リターンを削除するには、入力ファイルを で実行dos2unixするか、他の方法を使用して DOS の行末を UNIX の行末 (\n単独) に変更します。

于 2013-09-30T19:55:36.057 に答える