忽略 shell 脚本输出中的错误
Omit error from shell script output
如果 ICMP 回显失败,我想忽略此 IF 语句中的错误。
示例代码:
if ping -q -c 1 -W 1 1.2.3.4 >/dev/null; then
echo -e "PING OK"
else
echo -e "PING NOK"
fi
如果 ping 成功或您 运行 在脚本之外的命令,它会完美运行,但如果没有响应,则会给出以下输出。
PING 1.2.3.4 (1.2.3.4): 56 data bytes
--- 1.2.3.4 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING NOK
我已经看到引用 2>/dev/null 的答案,但是这会在输出中显示整个 ping 查询,无论成功与否! 2>/dev/null 的示例如下。
PING 1.2.3.4 (1.2.3.4): 56 data bytes
--- 1.2.3.4 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 26.134/26.134/26.134/0.000 ms
PING OK
这是一个有点 n00b 的问题,但我是网络专家,而不是开发人员:)
提前致谢!!
«经典»解决方案:
if ping -q -c 1 -W 1 1.2.3.4 >/dev/null 2>&1; then
echo -e "PING OK"
else
echo -e "PING NOK"
fi
一种更现代的方法(并且 不 POSIX 兼容!)方法,自 BASH 4:
起可用
if ping -q -c 1 -W 1 1.2.3.4 &>/dev/null; then
echo -e "PING OK"
else
echo -e "PING NOK"
fi
这两个意思是«将 STDOUT 和 STDERR 重定向到 /dev/null»,但第一个是按顺序执行的,首先重定向 STDOUT,然后将 STDERR 重定向到 STDOUT。
您可以使用退出状态 [ Check this ] 来..
ping -q -c 1 -W 1 1.2.3.4 >/dev/null 2>&1
[ $? -eq 0 ] && echo "Ping OK" || echo "Ping NOK"
如果 ICMP 回显失败,我想忽略此 IF 语句中的错误。
示例代码:
if ping -q -c 1 -W 1 1.2.3.4 >/dev/null; then
echo -e "PING OK"
else
echo -e "PING NOK"
fi
如果 ping 成功或您 运行 在脚本之外的命令,它会完美运行,但如果没有响应,则会给出以下输出。
PING 1.2.3.4 (1.2.3.4): 56 data bytes
--- 1.2.3.4 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING NOK
我已经看到引用 2>/dev/null 的答案,但是这会在输出中显示整个 ping 查询,无论成功与否! 2>/dev/null 的示例如下。
PING 1.2.3.4 (1.2.3.4): 56 data bytes
--- 1.2.3.4 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 26.134/26.134/26.134/0.000 ms
PING OK
这是一个有点 n00b 的问题,但我是网络专家,而不是开发人员:)
提前致谢!!
«经典»解决方案:
if ping -q -c 1 -W 1 1.2.3.4 >/dev/null 2>&1; then
echo -e "PING OK"
else
echo -e "PING NOK"
fi
一种更现代的方法(并且 不 POSIX 兼容!)方法,自 BASH 4:
起可用if ping -q -c 1 -W 1 1.2.3.4 &>/dev/null; then
echo -e "PING OK"
else
echo -e "PING NOK"
fi
这两个意思是«将 STDOUT 和 STDERR 重定向到 /dev/null»,但第一个是按顺序执行的,首先重定向 STDOUT,然后将 STDERR 重定向到 STDOUT。
您可以使用退出状态 [ Check this ] 来..
ping -q -c 1 -W 1 1.2.3.4 >/dev/null 2>&1
[ $? -eq 0 ] && echo "Ping OK" || echo "Ping NOK"