我想知道是否可以动态读取网络接口的 IP 地址以供 bash 脚本使用。例如:
#!/bin/bash
MYPUBLICIP= get_eth0_address
MYPRIVATEIP= get_eth0:0_address
- 我该如何处理这个问题?
- 是否可以区分 eth0 和虚拟 eth0:0?
[背景] 我正在尝试编写一个脚本,将各种规则应用于一组 VPS 的 iptables。我试图避免摆弄每台机器的单独 IP。
答案1
ip
将始终返回物理接口的所有地址记录,即使您指定了虚拟接口。
ifconfig
让您指定单个接口,但解析起来有点烦人:
ifconfig eth0:0 |awk -F':| ' '/inet addr/{print $13}'
编辑
ip
当然,可以使用更具选择性的 awk 来管理这种方式:
ip -o -4 addr sh |awk '/eth0:0/{print $4}'
答案2
就像是
ip -4 -o addr show dev eth0 | sed 's/\// /g' | awk '{print $4}'
应该会给你相关接口的裸IP地址。