shell下用ping 测试一个网络是否通,只显示结果而不显示过程输出

要求:用ping 测试一个网址但只显示是否通而不显示过程输出

if [ "`ping -c 1  A.B.C.D `" ];  then 
	echo  yes && exit 0
else echo no && exit 0
fi               
如果不管这个地址ping 不ping 得通  都会输出yes 因为通不通都会有标准输出(也就是屏幕上有返回值啦!)。


 如果改成如下:
if [ "`ping -c 1  A.B.C.D > /dev/null 2>&1`" ];  then 
	echo  yes && exit 0
else echo no && exit 0
fi         
不管通不通都返回no;因为标准输出的结果是空,而不管返回值是0还是1


如果改成:

if  ping -c 1 A.B.C.D >/dev/null 2>&1 ; then
        echo yes 
else   echo no! 

fi
只有通才返回yes  
原因:if 是根据ping   的返回值来判断的,而根标准输出是否为空无关,尽管此时前ping -c 1 219.229.154.101 >/dev/null 2>&1   在标准输出上是空,但是ping  的返回值还是 true (即 0);


总结:前两句都是判断 []中是否为空 而第三个,则是将ping的返回值给if判断

 


版权声明:本文为jinjiang888666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。