На самом деле это не чище и не короче, но я думаю, вам следует использовать ip
вместо ifconfig
. Он актуален, поддерживается и, возможно, что более важно для ваших целей, он производит согласованный и разборчивый вывод.
Если вам нужен IPv4-адрес дляeth0
:
$ ip -4 -o addr show eth0 | awk '{print $4}'
192.168.1.166/24
в нотации CIDR. Если нотация CIDR не нужна, ее можно удалить :
.$ ip -4 -o addr show eth0 | awk '{print $4}' | cut -d "/" -f 1
192.168.1.166
В вашем вопросе указано, что вам нужен адрес для указанного вами интерфейса. Я думаю, что приведенные выше ответы обеспечивают это, но если вам нужен адрес IPv4 для хоста, на котором вы находитесь, возможно, hostname
будет проще/кратче:
$ hostname --all-ip-addresses | awk '{print $1}'
Или, если вам нужен адрес IPv6:
$ hostname --all-ip-addresses | awk '{print $2}'
Наконец, еще один вариант, который ИМХО является «наиболее элегантным», — получение IPv4-адреса для любого интерфейса, используемого для подключения к указанному удаленному хосту (8.8.8.8 в данном случае ). Предоставлено @gatoatigrado в этот ответ:
$ ip route get 8.8.8.8 | awk '{ print $NF; exit }'
192.168.1.166
Как скрипт:
$ RHOST=8.8.8.8
$ ip route get $RHOST | awk '{ print $NF; exit }'
Это может быть полезно на хосте с несколькими интерфейсами и спецификациями маршрута.