运行涉及机器名称和本地网络的脚本时出错

运行涉及机器名称和本地网络的脚本时出错

我正在尝试编写一个脚本,该脚本将计算机名称作为命令行参数,并显示一条消息,通知我主机是否位于本地网络上。

这是我所拥有的:

#!/bin/bash
gateway=$(ip route | grep default | cut -d' ' -f3)

if [[ $(ip route get "$1" | grep -q $gateway) ]]; then

echo "$1 is on the local network"

else

echo "$1 is not on the local network"

fi 

每当我使用我的机器名称(ubuntu)运行它时,我都会得到以下输出:

Error: any valid prefix is expected rather than "ubuntu".
ubuntu is not on the local network

我不确定这个错误意味着什么以及为什么我会收到它,以及脚本是否正在做它应该做的事情。任何意见,将不胜感激。谢谢!

答案1

在我的 Ubuntu Linux 上,IP 地址位于第四个字段中。确保剪切分隔符符合您的想法

ip r | grep default && ip r | grep default | cut -d' ' -f3 && ip r | grep default | cut -d' ' -f4
none default via 192.168.1.1 dev eth1  proto none  metric 0
via
192.168.1.1

答案2

要检查机器是否位于同一(子)网络上,您必须查看它的地址是否在地址掩码范围内...ip addr将其显示在brd字段中。

另一种更偷偷摸摸的方法是看看egtraceroute说了什么。

相关内容