Bash IF语句条件命令

Bash IF语句条件命令,bash,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命令的退出代

在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


我该怎么说呢?

应该是
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
# ...

它应该是
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
# ...

如果您正在检查DNS条目,那么nslookup或dig可能比ping做得更好。Ping可能因DNS以外的原因而失败(例如,没有路由),而nslookup或dig将只测试DNS(包括服务器是否已启动等)。如果您正在检查DNS条目,那么nslookup或dig可能比Ping做得更好。Ping可能因DNS以外的原因而失败(例如,没有路由),而nslookup或dig将仅测试DNS(包括服务器是否启动等)。