Ответ 1
вы можете сделать это только с помощью одной команды awk. Не нужно использовать слишком много труб.
$ ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}'
Контекст: В системах * nix можно получить IP-адрес машины в оболочке script следующим образом:
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-адрес для использования в оболочке script?
(мои извинения * пользователям BSD и Solaris, так как приведенная выше команда может не работать, я не смог протестировать)
вы можете сделать это только с помощью одной команды awk. Не нужно использовать слишком много труб.
$ ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}'
вы даете прямой интерфейс, тем самым уменьшая один grep.
ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'
На основе этого вы можете использовать следующую команду
ip route get 8.8.8.8 | awk 'NR==1 {print $NF}'
Посмотрите на руководство Beej на network, чтобы получить список сокетов с помощью простой программы C для печати IP-адресов с помощью getaddrinfo(...)
вызов. Эта простая C-программа может использоваться в части оболочки script, чтобы просто распечатать IP-адреса, доступные для stdout
, что было бы проще сделать, а затем полагаться на ifconfig
, если вы хотите оставаться переносимым в качестве вывода ifconfig
может меняться.
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
ifconfig | grep 'broadcast\| Bcast' | awk -F '' {'print $2'} | head -n 1 | sed -e 's/addr://g'
Возможно, это поможет.
more /etc/hosts | grep `hostname` | awk '{print $1}'
# 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"
}