Podchodzisz do sprawy zbyt prosto opisując rzeczy.
Trzeba się troche rozpisać, założenia, co wiemy, czego nie wiemy, jak co działa.
Nawet spróbować się dowiedzieć, jak działa komenda ifconfig.
Bo chyba nie jesteś pewny czy " ifconfig " jest dobrym pomysłem.
Sieć internetowa ( publiczne IP ) --> ( publiczne IP ) modem lub router ( lokalne IP ) --> ( lokalne IP ) komputer1. "
ifconfig "
pokaże IP lokalne jeśli masz podpięte urządzenie jako router.
2. "
ifconfig "
pokaże IP zewnętrzne jeśli masz podpięte urządzenie jako modem.
3. "
ifconfig "
pokazuje IP , w zależności co jest podpięte ( wi-fi , kabel ethernetowy, wirtualne loopback )
I teraz co ty chcesz konkretnie uzyskać z tego ?Zeby pobrać IP publiczne, zewnętrzne, niezależnie od podłączego urządzenia,
możesz się spytać o IP
- albo swojego urządzenia ( jesli to router )
- albo jakiegoś serwisu iternetowego
- albo zeskanować trasę do jakiegoś znanego bardziej Ci serwisu, jeśli Ci pozwoli i wiesz czy po drodze masz jakieś urządzenie ( mtr traceroute )
( ale tu jeśli uzywasz bardzo szczelną zaporę to bez rozszczelnienia mtr i traceroute nie zadziala )
w internecie polacają serwisy internetowe z których za pomacą lynx lub lub curl lub wget możesz pobrać dane i potem wyodrębnić z tekstu IP.
https://stackoverflow.com/questions/25142055/linux-command-for-external-ip-addresshttps://stackoverflow.com/questions/14594151/methods-to-detect-public-ip-address-in-bashhttps://stackpointer.io/unix/unix-linux-get-external-ip-command-line/378/I tu masz dylematy
- A jesli serwis padnie ? To musisz szukać nowego.
- A jeśli wykorzystają twoje IP że jest aktywne, sprawdzą zaporę i spróbują się włamać do twojego komputera ?
Więc jeśli nie znajdziesz lepszej metody, to sam musisz wybrać jaka metoda będzie lepsza.
________________________________
Wracając do twojego przykładu jesli Ci to obojętne czy chcesz publiczne czy lokalne IP
Jak poznać z którego polączenia aktualnie korzystasz ? ( wi-fi , ethernet, loopback )
A jesli nie masz nic podpiete to IP nie będzie.
Ja zakładam w ten sposób,
- nie może to być
loopback bo to połączenie wewnetrzne
- jeśli będzie miało
chyba UP lub RUNNING to znaczy że połączenie istnieje ( możesz se przetestować )
więc to trzeba jakoś wyodrębnić.
# ifconfig | grep UP
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
# ifconfig | grep UP | grep -v lo:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
# ifconfig | grep UP | grep -v lo: | awk '{printf $1}'
eth0
No i mamy informacje które urządzenie jest aktywne, a teraz IP z tego.
To teraz poszukamy IP
# ifconfig | grep -A1 eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168..... netmask 255.255.255.0 broadcast 192.168.0....
To co wskazuje na adres IP lokalne albo publiczne to słowo "inet " dla IPv4 i inet6 dla IPv6
# ifconfig | grep -A1 eth0 | grep inet
inet 192.168.0.... netmask 255.255.255.0 broadcast 192.168.0....
# ifconfig | grep -A1 eth0 | grep inet | awk '{printf $2}'
192.168....
I masz IP
Czyli mogę zapisać to w zmiennych
URZADZ=$(ifconfig | grep UP | grep -v lo: | awk '{printf $1}')
NASZEIP=$( ifconfig | grep -A1 $URZADZ | grep inet | awk '{printf $2}' )
# I sobie wyświetlimy
echo "$NASZEIP"
To jest tylko przykład i się rozpisałem żebyś zrozumiał,
a jaką metodę wybierzesz, czy skrócisz, czy użyjesz innej metody, czy zainteresujesz się skąd te komendy wziąłem
( google i opcja "komenda --help " i "man komenda" twoim przyjacielem )
to już twoja sprawa.