我试图从分析值“的跳数” 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 "
您是否正在寻找花跳数,还是“64个跳MAX”的价值? 如果是前者,用tail
来获得输出的最后一行,则awk
打印的第一列:
traceroute "$hostname" 2>/dev/null | tail -1 | awk '{print $1}'
在跟踪路由输出“跳”(错误,实际上)的唯一发生是朝向顶部,于stderr“头”行:
traceroute to foo.bar.com (123.12.1.23), 30 hops max, 40 byte packets
或类似-如果这是你想抓住一条线,你可以用grep的"hops max,"
之类,以减少不需要的命中风险(应该有的中间宿主恰好有“跳”在他们的DNS)。
你是这个意思吗? 是你的问题抓住跳这个30,最大数量,成一个bash变量? 如果真是这样,那么
maxhops=`traceroute www.yahoo.com 2>&1 >/dev/null | grep "hops max" | cut -d' ' -f5`
应该帮助-您可以使用$maxhops
(在上面的例子中,这将是30),在此之后。
但我怀疑你的意思是完全不同的东西 - 澄清,也许...?
编辑 :OP澄清了他们想要的,不是maxhops,而是通过路由跟踪测量啤酒花的实际数量; 为了这个目的,
numhops=`traceroute www.yahoo.com 2>/dev/null | tail -1 | cut -d' ' -f2`
或者更简单
numhops=`traceroute www.yahoo.com | wc -l`
应该正常工作!
如果你想什么票友(或不止一个结果,等等),那么AWK在其他的答案建议是完全没有问题的,但grep的,尾巴,切割的管道结构,是一个相当传统的UNIX-Y的做法,还是相当可行的简单的情况下(和一些复杂的,但AWK或Perl可能更适合那些 ;-)。
traceroute www.google.com 2>/dev/null | awk 'NR==1{print $5;exit}'
另一种方式,在不可达的(因为缺乏更好的词)的跳不计
# traceroute www.yahoo.com 2>/dev/null | awk 'NR>1 && !/* * */{c++}END{print c}'
16