免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1977 | 回复: 7
打印 上一主题 下一主题

问个grep转sed的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-27 11:06 |只看该作者 |倒序浏览
一个ping网关测试网络状况的脚本,原理是grep回射数据包看是否有ttl值,有就认为网络良好,否则网络断开:
#/bin/sh

if  ping -c 8 $GWIP 2>/dev/null | grep "ttl=[0-9]\+"
then
echo "nice networking"
else
echo "bad networking"
fi


这个脚本在我Redhat上没有问题,后来嵌入式板,可是没有提供grep,只有sed,所以只好用sed代替grep,问题来了:

#/bin/sh

if  ping -c 8 $GWIP 2>/dev/null | sed -n  '/ttl=[0-9]\+/p'
then
echo "nice networking"
else
echo "bad networking"
fi

<UNIX编程环境>说 sed -n '/ patten/p' 等同于grep
也用了grep patten ==  sed '/patten/!d'

可不管GWIP是否ping通,都显示nice networking

哪位能给些建议,谢谢了

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2007-12-27 11:10 |只看该作者
if [ ! -z "$(ping -c 8 $GWIP 2>/dev/null | sed -n '/ttl=[0-9]\+/p')" ]

论坛徽章:
0
3 [报告]
发表于 2007-12-27 11:11 |只看该作者
原帖由 gigabyte 于 2007-12-27 11:06 发表
一个ping网关测试网络状况的脚本,原理是grep回射数据包看是否有ttl值,有就认为网络良好,否则网络断开:
#/bin/sh

if  ping -c 8 $GWIP 2>/dev/null | grep "ttl=[0-9]\+"
then
echo "nice networking" ...

ping -c 8 192.168.100.72 2>/dev/null | sed -n  '/ttl=[0-9]\+/p'

执行下这个就不晓得了

论坛徽章:
0
4 [报告]
发表于 2007-12-27 11:15 |只看该作者
ttl值能反映出网络状况良好?

论坛徽章:
0
5 [报告]
发表于 2007-12-27 11:19 |只看该作者
原帖由 ly5066113 于 2007-12-27 11:10 发表
if [ ! -z "$(ping -c 8 $GWIP 2>/dev/null | sed -n '/ttl=[0-9]\+/p')" ]






多谢指教

论坛徽章:
0
6 [报告]
发表于 2007-12-27 11:21 |只看该作者
原帖由 davistar 于 2007-12-27 11:15 发表
ttl值能反映出网络状况良好?



就是网络正常吧
也不能说良好

实在找不出什么办法来判断网络是断开的还是连接的,除了ping网关(先考虑指定IP或者DHCP网络)

你有什么好点的法子么?谢谢

论坛徽章:
0
7 [报告]
发表于 2007-12-27 11:27 |只看该作者
给你一个思路:
sed 只要不是运行错误,就返回0
而grep 必须要匹配到,才返回0

因此,可以用sed的输出来判断是否网络是否通

ping -c 8 IP | sed -n '/ttl=[0-9]\+/q1'  这样当匹配到第一个有ttl=n的行后,就会退出,并且返回码就是q后面的数字
[ $? -eq 1 ] && echo OK || echo FALSE
如果匹配到,就返回1,否则,会返回0

在我的机器上,是接收q后面有数字的形式,返回码是那个数字


如果想判断网络状态是否良好,可以通过返回结果中的time=??的那个值来大概判定


ping -c 8 IP | sed -n '/ttl=[0-9]\+/{s/.*time=\([0-9.]\+\).*/\1/;p;q1}'
这样会返回一个时间,可以根据这个时间大致判断一下。

[ 本帖最后由 springwind426 于 2007-12-27 11:33 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-12-27 11:42 |只看该作者
原帖由 springwind426 于 2007-12-27 11:27 发表
给你一个思路:
sed 只要不是运行错误,就返回0
而grep 必须要匹配到,才返回0

因此,可以用sed的输出来判断是否网络是否通

ping -c 8 IP | sed -n '/ttl=[0-9]\+/q1'  这样当匹配到第一个有ttl=n的行后 ...


顶了再说
CU果然是个好地方啊,强手如林,大家都很热心

多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP