Je lepší se vyhnout použití ifconfig pro získání IP adresy ve skriptech je v některých distribucích zastaralá (např. CentOS a další, ve výchozím nastavení ji již neinstalujte).
V jiných systémech se výstup ifconfig liší podle vydání distribuce (např. výstup/mezery/pole ifconfig se například liší od Debianu 8 až Debianu 9).
Pro získání IP adresy s ip , podobným způsobem se ptáte:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Nebo ještě lépe:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Nebo, jak se ptáte "IP="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Bezostyšné přizpůsobení nápadu od @Roman
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Normální výstup:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
Od man ip :
-o, -jeden řádek
výstup každého záznamu na jeden řádek, nahrazování řádků znakem '\'. To se hodí, když chcete výstup porovnat pomocí wc(1) nebo grep(1).
Podívejte se na jeden příklad proč ifconfig nedoporučuje se:BBB:`bbb-conf --check` zobrazující IP adresy jako `inet` - ifconfig woes
Pro pochopení proč ifconfig je na cestě ven, viz Rozdíl mezi příkazy 'ifconfig' a 'ip'
ifconfigje od net-tools, které dlouho nebyly schopny plně držet krok se síťovým stackem Linuxu. Stále také používá ioctl pro konfiguraci sítě, což je ošklivý a méně výkonný způsob interakce s jádrem.Kolem roku 2005 byl představen nový mechanismus pro ovládání síťového zásobníku - netlink sockets.
Konfigurace síťového rozhraní
iproute2využívá mechanismus tohoto plně duplexního síťového soketu, zatímcoifconfigspoléhá na systémové volání anioctl.
Awk řešení:
ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'
Ukázkový výstup:
IP=10.0.2.15