【问题标题】:Parse ifconfig with Bash to get current IP address (wifi or ethernet)使用 Bash 解析 ifconfig 以获取当前 IP 地址(wifi 或以太网)
【发布时间】:2015-01-22 00:02:40
【问题描述】:

我正在尝试使用 bash 脚本输出我当前的 IP 地址。我试图绕过awk 并管理以下内容:

/sbin/ifconfig $1 | grep "inet" | awk '$1 == "inet" {gsub(/\/.$/, "", $2); print $2}'

哪个输出:

127.0.0.1
192.168.178.57

我现在有两个问题:首先,127.0.0.1 没用,怎么去掉? 其次,192.168.178.57 是我的 Wi-Fi 连接的 IP 地址。但是,我希望脚本能够获取 Wi-Fi 或以太网的 IP 地址,无论我目前使用的是哪个。 /sbin/ifconfig 的示例输出可以是 found here.

【问题讨论】:

  • ifocnfig 不会给你外部 IP
  • 我只是在寻找我的内部 IP。
  • 在这种情况下,可以有多个接口为您提供多个内部 IP。你想在这里展示哪一个?
  • 我可以获取所有当前的IP吗?
  • 当然可以

标签: macos bash awk ifconfig


【解决方案1】:

你可以使用这个 awk 脚本:

awk '/inet / && $2 != "127.0.0.1"{print $2}' <(ifconfig)

【讨论】:

    【解决方案2】:

    在计算机上获取当前使用的 IP 的最佳方式。

    ip route get 8.8.8.8 | awk '{print $NF;exit}'
    192.168.1.30
    

    旧版本。不要使用!!!!!!

    查看我对这篇文章的回复: Linux bash script to extract IP address

    【讨论】:

    • 对不起,我忘了说我在 OSX 上
    • @doque 还有你没有ip route
    • 好像不是这样:~ » ip route zsh: command not found: ip
    • @doque 如果我搜索ip route getosx,我可能会发布关于它的信息。但我没有看到有人说它不起作用。
    • @Mehdi 这是一篇很老的帖子。在这里找到更好的解决方案:stackoverflow.com/questions/21336126/…
    【解决方案3】:

    我建议您使用ip 命令而不是ifconfig,因为与ifconfig 相比,ip 是“未来”并且更可靠。

    $ ip addr show dev $(ip route ls|awk '/default/ {print $5}')|grep -Po 'inet \K(\d{1,3}\.?){4}'
    10.251.26.9
    

    在这里,这个 oneliner 将使用 ip route ls 命令收集默认接口并收集接口 ID,并根据它获取该接口的 IP 地址。

    这里grep 命令使用正则表达式来安全地获取IP 地址。

    【讨论】:

      【解决方案4】:

      如果您不介意安装一些东西和/或如果您已经拥有节点,请尝试sindresorhus/internal-ip

      $ npm install --global internal-ip
      $ internal-ip
      192.168.0.2
      

      专业版:跨平台

      注意:我知道它不是 bash 并且它不使用 ifconfig,但我来这里是为了寻找一个可以在任何地方使用的通用工具,也许它可以帮助其他人。

      【讨论】:

      猜你喜欢
      • 2014-07-19
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      相关资源
      最近更新 更多