Мне интересно, можно ли динамически читать IP-адреса сетевых интерфейсов для использования в сценарии bash. Что-то вроде:
#!/bin/bash
MYPUBLICIP= get_eth0_address
MYPRIVATEIP= get_eth0:0_address
[Предпосылки] Я пытаюсь написать сценарий для применения различных правил к iptables для набора VPS. Я стараюсь не возиться с индивидуальными IP-адресами каждой машины.
ip
всегда будет возвращать все записи адресов для физического интерфейса, даже если вы укажете виртуальный.
ifconfig
давайте укажем единый интерфейс, но это немного утомляет разбирать:
ifconfig eth0:0 |awk -F':| ' '/inet addr/{print $13}'
РЕДАКТИРОВАТЬ
В ip
Конечно, можно управлять более избирательным awk:
ip -o -4 addr sh |awk '/eth0:0/{print $4}'
Что-то вроде
ip -4 -o addr show dev eth0 | sed 's/\// /g' | awk '{print $4}'
должен предоставить вам чистый IP-адрес соответствующего интерфейса.