要求:用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判断