在没有 ping 的情况下从命令行测试主机名是否存在

jas*_*ose 3 linux ip bash host

我们有一个脚本需要对有限的主机列表采取行动。但是每次我们在 /etc/hosts 文件中添加或删除主机时,我们最终都必须更新这个脚本。

基本上,说我的主机文件看起来像:

192.168.100.1     hostip_1
192.168.100.2     hostip_2
192.168.100.10    hostip_3
192.168.100.20    hostip_5
Run Code Online (Sandbox Code Playgroud)

我的脚本 (bash) 执行以下操作:

callmyfunction hostip_1
callmyfunction hostip_2
callmyfunction hostip_3
callmyfunction hostip_5
Run Code Online (Sandbox Code Playgroud)

如果我想将 hostip_4 添加到主机列表中,我现在必须进入并编辑我的脚本并将其添加到列表中。虽然这是一个小的编辑,但它仍然是一个可以在过程中被遗忘的步骤(特别是如果有人不熟悉系统的话)。

有没有办法可以测试“hostip_1”是否是系统内的有效主机名(无需ping主机或grepping /etc/hosts文件)?我们可能会使用多个主机文件,不同的配置可能有不同的文件名,所以我不能依靠尝试 grep 单个文件。我需要系统为我完成这项工作。

任何线索?

jas*_*ose 5

首先,我关于不在主机文件中的东西的说法是错误的。那正是他们所在的地方。对我来说是愚蠢的。

但答案是:

getent hosts
Run Code Online (Sandbox Code Playgroud)

这将使它打印出所有内容,我可以从那里进行查找。

  • 您甚至不需要检查作为字符串的结果:如果找不到主机,getent 将返回非零值 -- `if getent hosts $name; 然后 echo "$name 在主机中"; else echo "$name 未找到"; 菲` (2认同)