我如何检查脚本中的主机命令是否获得有效的 ip

我如何检查脚本中的主机命令是否获得有效的 ip

假设我们只有 1 个参数

host $1

我如何检查上述命令是否会给我答案或:

Host $1 not found (NXDOMAIN) 

我不想显示未找到的错误,而是只想显示-

答案1

host如果无法解析您的输入,将退出 1,因此您可以使用 if 构造:

if ! host "$1" | grep -v 'not found'; then
  printf '%s\n' '-'
fi

我们用来!测试命令是否失败(因为我假设您只想在命令通过时正常打印输出)。 将错误host发送not found到 stdout 而不是 stderr,因此我们不能只是隐藏 stdout。这就是为什么我将主机命令通过管道传递到grep -v 'not found'其中,如果存在未找到的错误,并且仍然退出 1,则会隐藏该错误,从而导致 if 构造打印-。如果没有找到not found就会退出 0。

答案2

退出状态就足够了吗?$?即使您使输出静音,您也可以合并上一个命令的退出状态。对于host退出状态,0 表示成功,1 表示错误

[17:54] [ws ~] $ host 127.0.0.112 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
1
[17:54] [ws ~] $ host 127.0.0.1 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
0

相关内容