tracerouteの出力での「ホップ」(stderrに、実際に)の唯一の発生がstderrの「ヘッダ」行で、上部に向かっている:
traceroute to foo.bar.com (123.12.1.23), 30 hops max, 40 byte packets
など - これを1行で取得したい場合は、望ましくないヒットのリスクを減らすために"hops max,"
などをgrepすることができます(一部の中間ホストがちょうど "ホップ" DNS)。
この意味は?あなたの問題は、この30、ホップの最大数を、bash変数につかみますか?それはそうだあれば、
maxhops=`traceroute www.yahoo.com 2>&1 >/dev/null | grep "hops max" | cut -d' ' -f5`
は役立つはずです - あなたはこの後$maxhops
を使用することができます(そして、それは、上記の例では30になります)。
しかし、私はあなたが何かを完全に違うと思っています - 明らかに、おそらく...?
編集:OPは、maxhopsではなく、tracerouteで測定されたホップの実際の数です。その目的のために、
numhops=`traceroute www.yahoo.com 2>/dev/null | tail -1 | cut -d' ' -f2`
または単純
numhops=`traceroute www.yahoo.com | wc -l`
は正常に動作する必要があります!
好きなもの(または複数の結果など)が必要な場合は、他の回答に示唆されているようにawkは完全にうまくいっていますが、grep、tail、およびcutのパイプラインミックスは、単純なケース(複雑なものもありますが、awkやperlはのほうが、 ;-)のほうが適切かもしれません。
私はmaxhopsの変数を設定するのが好きです。あなたの権利は、スクリプトの最終出力を次のように画面に表示することです: "ホストwww.google.comは---ホップ離れています"。 ----は、tracerouteコマンドから解析されたホップ値です。ユーザーが入力したサイトによって異なる場合があります。私はtracerouteとそのデータだけから解析されたホップ数を取得しようとしています。あなたはどう思いますか? –
wc -lを使用すると正確ではないことに注意してください。つまり、tracerouteが表示されることもあるでしょう* * *ホップとして数えたいですか? – ghostdog74
"header"はstderrにありますので、wcはそれを数えません(/ dev/nullにリダイレクトされますが、それは問題ではなく、&1にファンネルされていなければカウントされません)。それを試して、@ ghostdog74:テール-1とカット、そしてwc -lは、正確に同じ数を与える! –