Może być kilka różnych sposobów osiągnięcia tego, o co pytasz, jednak po prostu to wyrzucę.
Mam MacBooka Pro, który nie ma wbudowanego portu Ethernet, więc w moich przykładach będę go używać Port sprzętowy: Wi-Fi odkąd przetestowałem to w obu przykładach poniżej i zadziałało, jednak możesz to zmienić Port sprzętowy: Ethernet jeśli to jest wyjście
networksetup -listallhardwareports pokazuje dla ciebie.
Jeśli chcesz tylko wyprowadzić adres IP urządzenia docelowego do stdout, użyj następującego przykładu:
$ ipconfig getifaddr $(networksetup -listallhardwareports | awk '/Hardware Port: Wi-Fi/{getline; print $2}')
$ 192.168.1.100
Jeśli chcesz przypisać go do zmienna w scenariusz , użyj następującego przykładu:
ipAddress="$(ipconfig getifaddr $(networksetup -listallhardwareports | awk '/Hardware Port: Wi-Fi/{getline; print $2}'))"
Wyjaśnienie:
Odpowiednie wyjście networksetup -listallhardwareports dla mojego systemu jest:
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: 28:cf:e3:10:a4:cd
(Uwaga: to nie jest mój prawdziwy adres MAC)
Za pomocą $(...) podstawianie poleceń, aby mieć coś do przekazania ipconfig getifaddr <args> Określa nazwę urządzenia portu sprzętowego z wyjściem networksetup -listallhardwareports i fajka | to przez awk który szuka Hardware Port: Wi-Fi i używa get line funkcja, która odczytuje następną linię po znaku mecz i jest przekazywany do print $2, co w istocie drukuje drugą część linii po znaku mecz , co w tym przypadku jest en0 i to zostaje przekazane ipconfig getifaddr jako argument w pierwszym przykładzie, np ipconfig getifaddr en0. Wyjściem jest adres IP.
W drugim przykładzie drugi $(...) podstawianie komend jest używane wokół złożonej linii komend używanej dla stdout przykład, aby przypisać go do ipAddress zmienna gdy używany w scenariusz .
Uwaga: To naprawdę ma być przykładem, ponieważ nie zakodowałem go tak, aby był wyłączony. Innymi słowy, jeśli urządzenie nie ma i adres IP nie będzie wyjścia stdout i nic nie zostało przypisane do ipAddress zmienna w scenariusz . Chociaż w scenariusz może być zakodowany w celu sprawdzenia, czy ipAddress zmienna jest pusta i działa odpowiednio.