在bash中,我想测试主机名是否有DNS条目。如果有,那么我想做X否则做Y。
我怎么写这个?到目前为止,我正在考虑以下事项:
if [[ `ping -c 1 $1 2> /dev/null` ]]; then
# the hostname was not found
# perform Y
else
# the hostname was found
# perform X
fi;
写完这篇文章后,我不确定是否使用&2>
代替2>
。使用不同的退出代码,当ping命令的退出代码为0时,我可能更好地执行X.
我该怎么说呢?
答案 0 :(得分:4)
应该是2>
,而不是&2>
。但是,[[ `foo` ]]
将捕获命令foo
的输出,并尝试将其作为条件表达式进行评估。这不是你想要的。要运行命令并测试其退出状态,只需执行以下操作:
if ping -c 1 "$1" 2> /dev/null; then
# the hostname was found
# perform X
else
# the hostname was not found
# perform Y
fi
(如果变量包含任何特殊字符,最好将$1
放在引号中。)
请注意,bash 中的if
测试在退出状态为0时成功,因此您需要交换Y和X块。
如果要取消ping
的所有输出,请重定向其标准输出:
if ping -c 1 "$1" 1>/dev/null 2>/dev/null; then
# ...