Эффективный способ получить ваш IP-адрес в сценариях оболочки - PullRequest
11 голосов
/ 02 марта 2010

Контекст: В системах * nix IP-адрес машины можно получить в сценарии оболочки следующим образом:

ifconfig | grep 'inet' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}'

Или вот так:

ifconfig | grep 'inet' | grep -v '127.0.0.1' | awk '{print $2}' | sed 's/addr://'

Вопрос: Будет ли более простой, но переносимый способ получения IP-адреса для использования в сценарии оболочки?

( мои извинения пользователям * BSD и Solaris, поскольку приведенная выше команда может не работать ; я не смог проверить)

Ответы [ 7 ]

12 голосов
/ 02 марта 2010

вы можете сделать это с помощью одной команды awk. Не нужно использовать слишком много труб.

$ ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}'
5 голосов
/ 02 марта 2010

вы даете прямой интерфейс, тем самым уменьшая один grep.

ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'
2 голосов
/ 23 июня 2016

На основании этого вы можете использовать следующую команду

ip route get 8.8.8.8 | awk 'NR==1 {print $NF}'
1 голос
/ 02 марта 2010

Посмотрите здесь руководство Beej по сети , чтобы получить список сокетов с помощью простой программы на C, чтобы распечатать IP-адреса с помощью вызова getaddrinfo(...). Эта простая C-программа может использоваться в части сценария оболочки, чтобы просто распечатать IP-адреса, доступные для stdout, что было бы проще сделать, а затем положиться на ifconfig, если вы хотите оставаться переносимым в качестве вывода ifconfig может варьироваться.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 16 февраля 2016
# for bash/linux
ipaddr(){
if="${1:-eth0}"
result=$(/sbin/ip -o -4 addr show dev "${if}" | sed 's/^.*inet // ; s/\/...*$//')
printf %s "${result}"
tty -s  && printf "\n"
}
0 голосов
/ 17 декабря 2015

Может быть, это может помочь.

 more /etc/hosts | grep `hostname` | awk '{print $1}'
0 голосов
/ 20 ноября 2015

ifconfig | grep 'broadcast \ | Bcast' | awk -F '' {'print $ 2'} | голова -n 1 | sed -e 's / addr: // g'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...