Shell脚本:如何获取IP地址

最近在写Shell脚本,经常遇到要获取主机的IP地址。我们通常是使用ifconfig命令查看,他会产生一大堆信息,但是我们脚本中时间只需要一个公网IP。那么我们该怎么做呢?

获取公网IP地址

使用ip命令可以获得更加简洁的信息,因此我们使用ip配合awk就可以获得纯IP地址:

1
ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}'

这个命令通过查看查看8.8.8.8地址的路由包的来源,获取本机的公网IP地址,然后使用awk命令,过滤含有8.8.8.8的行,最后一行即是IP地址。

获取CIDR标记法的IP地址

1
ip -o -f inet addr show | awk '/scope global/ {print $4}'

该命令可以获取使用CIDR标记法的IP地址,不过它有时候会产生多个结果,比如有的Linux有安装了虚拟网络接口。

参考资料

  1. stackoverflow:Get Subnet mask in Linux using bash
  2. Linux bash script to extract IP address
  3. CIDR的IP地址的表示与划分方法
  4. CSDN:ip route命令