ping 192.168.0.1 | awk'{印刷 $1}'[重複]

ping 192.168.0.1 | awk'{印刷 $1}'[重複]
ping 192.168.0.1 | awk '{print $1}'
connect: Network is unreachable

いくつかのタスクを実行するスクリプトを作成しています。したがって、ホスト名が間違っているか、pingコマンドでエラーが発生した場合は、適切なエラーメッセージを表示したいと思います。

上記のコマンドを使用して生成されたエラーを修正しようとしました。私がやりたいことは単に「ping」の代わりにエラーを印刷することですが、そのようなことは起こりません。誰でもこれに対する解決策を教えてもらえますか?

ベストアンサー1

ping特定のホスト名にアクセスできることを確認するためにこれを使用する場合は、次のことができます。

if ping -c 1 "$otherhost" >/dev/null 2>&1; then
    printf 'The host "%s" is reachable\n' "$otherhost"
else
    printf 'The host "%s" is not reachable\n' "$otherhost"
fi

これはECHO_REQUEST単一のパケットを指定されたホストに送信し、終了ステータスを"$otherhost"使用してpingユーティリティがその操作を実行したかどうかを決定します。すべての通常の出力はping破棄されます。

他のホストを照会できないことは、pingホストが確実にダウンしているか、ルーティングできないという意味ではありません。パケットを無視することもできますECHO_REQUEST


失敗したときに生成された実際のエラーを出力したい場合は、pingユーティリティを2回呼び出さないようにすることができます。pingできます)。他の方法で):

pingerr=$(mktemp)
if ping -c 1 "$otherhost" >/dev/null 2>"$pingerr"; then
    printf 'The host "%s" is reachable\n' "$otherhost"
else
    printf 'The host "%s" is not reachable\n' "$otherhost"
    if [ -s "$pingerr" ]; then
        echo 'ping error:'
        cat "$pingerr"
    fi
fi
rm -f "$pingerr"

pingこれにより、後で失敗した場合に出力される一時ファイルにすべての診断メッセージが保存されますping(その中に内容がある場合は-sテストによってテストされます)。ファイルは常に生成されるため(空の場合でも)if- ステートメントの後に削除します。

この方法では、必要な方法でエラー出力ファイルを解析することもできます。たとえば、

pingerr=$(mktemp)
if ping -c 1 "$otherhost" >/dev/null 2>"$pingerr"; then
    printf 'The host "%s" is reachable\n' "$otherhost"
else
    printf 'The host "%s" is not reachable\n' "$otherhost"
    if [ -s "$pingerr" ]; then
        printf 'ping says'
        sed 's/^[^:]*//' <"$pingerr"
    fi
fi
rm -f "$pingerr"

ここでは、元のメッセージを出力するpingのではなく、印刷する前に最初のメッセージの前のビットを削除します。:

おすすめ記事