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判断

  • http://blog.csdn.net/jinjiang888666/article/details/6316108
  • http://blog.csdn.net/fyh2003/article/details/46880021
  • http://blog.csdn.net/jiangheng0535/article/details/10289093
  • https://www.cnblogs.com/MenAngel/p/5586677.html

你可能感兴趣的:(shell 中ping并且返回检测)