我正在尝试编写一个脚本,该脚本将计算机名称作为命令行参数,并显示一条消息,通知我主机是否位于本地网络上。
这是我所拥有的:
#!/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
说了什么。