【问题标题】:Get IP address info (gateway and subnet too) on Ubuntu or Debian using bash使用 bash 在 Ubuntu 或 Debian 上获取 IP 地址信息(网关和子网)
【发布时间】:2015-10-11 15:48:16
【问题描述】:

我正在尝试使用 bash 在 Debian 和 Ubuntu 系统上获取以太网或 wifi 适配器的 IP 地址。我可以使用 ifconfig 可靠地获得它,但它需要安装 net-tools,现在已弃用,但它确实有效。

showip=$(ifconfig eth0 | awk -F"[: ]+" '/inet addr:/ {print $4}')

我使用 ip route 做了一些东西,但它不能始终如一地工作,有时输出的行会根据发行版和版本而有所不同

MAINIP=$(ip route | awk 'NR==3{print $9}')
GATEWAYIP=$(ip route | awk 'NR==1{print $3}')
SUBNET=$(ip route | awk 'NR==2{print $1}')

有没有办法使用正则表达式进行 grep 或 awk 以确保其正常工作?

【问题讨论】:

    标签: regex linux bash ubuntu awk


    【解决方案1】:

    弄清楚哪些适用于无线连接,而不仅仅是 eth0(谢谢@D.K.),唯一的调整是针对 MAINIP。可能有更好的方法或我忽略的东西。

    MAINIP=$(ip route | grep src | awk '{print $9}')
    GATEWAYIP=$(ip route | grep default | awk '{print $3}')
    SUBNET=$(ip route | grep proto | grep -v default | awk '{print $1}')
    

    没有双重 grep 的子网

    SUBNET=$(ip route | awk '/proto/ && !/default/ {print $1}')
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      MAINIP=$(ip addr show dev eth0 | grep "inet" | awk 'NR==1{print $2}' | cut -d'/' -f 1)
      

      对于子网,您可以:

      SUBNET=$(ip route | grep "src $MAINIP" | awk '{print $1}')
      

      对于 GW:

      GATEWAYIP=$(ip route show | grep default | awk '{print $3}')
      

      【讨论】:

      • ip addr 是最不受欢迎的 Linux 网络命令之一。 ifconfig 是人们遇到的第一件事,很少有人会寻找其他东西。
      • 感谢 IP 的工作,有关于网关和子网的想法吗?
      • 更新为包括wifi,因为我相信ip route会这样做。
      • 我编辑我的答案以包括我将如何提取 gw/subnet
      • @D.K.太棒了,只需要一个也可以无线的(我的错没有在原始问题中指定,现在更新了)。问题是它可能是 wlan0、ra0 等,尽管 ra0 很少见
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      相关资源
      最近更新 更多