IF语句条件命令

时间:2014-05-19 00:12:36

标签: bash

在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.

我该怎么说呢?

1 个答案:

答案 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
# ...