测试 IP 的 BASH 脚本

测试 IP 的 BASH 脚本

有没有一种优雅的方法可以在 BASH 脚本中测试 IP 地址?我可以执行 ifconfig 并使用 sed/awk 缩小 IP 范围,但我认为有一个更简单的解决方案。

我的应用程序基本上是在我进入内部网络时使用 SSH/SCP 脚本,而在我不在内部网络时也是如此。因此,我想要这种类型的流程

if IP=192.168.1.1
      then do this
 else
      then do that

答案1

您可以修改一些相当简单的东西来满足您的需要:

ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1'
if [ $? -eq 0 ]; then
   echo 'IP found'
else
   echo 'IP not found'
fi

编辑:忘记了 fgrep :)

答案2

如果要区分您是否已连接到 Intranet,
您可以对已知的内部服务器 IP 进行快速简短 ping 或 arp 尝试。
如果 IP 没有响应,则您可能位于 Intranet 之外。

可能会出现轻微故障(例如服务器暂时停机)。
这些可以允许(您错误地切换到 Internet 模式),
或者通过多次检查(针对不同的内部资源)进行进一步测试。

答案3

这更像是对 mikeB 答案的评论,但评论不允许代码,因此我将其作为答案发布:

您可以使用 grep 之类的工具来查找所需内容,例如

ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1'
if [ $? -eq 0 ]; then
   echo 'IP found'
else
   echo 'IP not found'
fi

这实际上可以简化,摆脱退出状态上的测试( [ 是测试的别名),因为 if 已经直接检查退出状态,这就是测试与 if 通信的方式:

if 
  ifconfig | fgrep -q 'inet 192.168.1.1'
then
  echo "IP Found"
else
  echo "IP Not found"
fi

您还可以通过使用大多数 Bourne Shell 内置的正则表达式搜索(使用 case 语句)来进一步简化此操作:

case $(ifconfig)
in 
  *"inet 192.168.1.1"*) 
     echo "IP found" 
   ;;
  *) 
    echo "IP not found" 
   ;; 
esac

答案4

ip addr show <DEVICE> | grep inet | grep -v inet6 | awk '{print $2}'

希望这样可以输出您的 IP。可能有更优雅的方法,但无论优雅与否,这种方法都能完成任务。

相关内容