我试图从traceroute
命令解析“跳数”值,并用bash脚本输出。
任何提示?很新,所以谢谢。
到目前为止,我的脚本看起来像这样:
#!/bin/bash
#parse traceroute for hops and output to stdout.
echo -n "Enter a host name(like www.google.com): "
read hostname
traceroute 2>&1 $hostname|grep "hops"
echo "number of hops are "
答案 0 :(得分:2)
您是在寻找它所花费的跳数,还是“最大64跳”值?如果是前者,请使用tail
获取最后一行输出,然后使用awk
打印第一列:
traceroute "$hostname" 2>/dev/null | tail -1 | awk '{print $1}'
答案 1 :(得分:1)
traceroute输出中唯一出现的“跳跃”(实际上是stderr)位于stderr“header”行的顶部:
traceroute to foo.bar.com (123.12.1.23), 30 hops max, 40 byte packets
之类的 - 如果那是你要抓住的那一行,你可能会为"hops max,"
或类似的东西寻找,以减少不受欢迎的命中的风险(如果某些中间主机碰巧有“跳” “在他们的DNS中。”
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的管道混合,是一种传统的unix-y方法,对于简单的情况(以及一些复杂的情况,但是awk或perl可能更适合那些; - )仍然可行。
答案 2 :(得分:0)
traceroute www.google.com 2>/dev/null | awk 'NR==1{print $5;exit}'
答案 3 :(得分:0)
另一种方式,那些不可达的啤酒花(缺少更好的单词)不计算
# traceroute www.yahoo.com 2>/dev/null | awk 'NR>1 && !/* * */{c++}END{print c}'
16