Můžete to udělat mnoha způsoby. Zde příklad:
$ cat /sys/class/net/eth0/operstate
up
ip a show ethX up
Pokud se nic nezobrazí, vaše rozhraní nefunguje
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Takže tady máme grep
všudypřítomné ip
stdout
nástroje pro řádek, který obsahuje jak naše rozhraní, které nás zajímá, tak frázi "stav UP" (děkujeme @Lekenstein za upozornění na potřebu trochu více specifičnosti než jen UP
). Použijeme argument a
jako krátký formulář pro address
a to by mělo stačit k získání seznamu všech nakonfigurovaných síťových karet v systému.
Jedna výhoda použití ip
mohlo by to být tak, že by to opravdu mělo být dostupné všude – tak například běžně konfiguruji síťová zařízení svého telefonu Android.
:colons
se používají k zamezení částečné shody – tímto způsobem garantujeme shodu pro eth0
na rozdíl od jinak možného someothereth0
nebo eth007
.
Děkuji @RaphaelAhrens za to, že mě popostrčil ke správnosti a vysvětlil mé řešení.
UPRAVIT:
Chcete-li zvládnout současné požadavky, můžete:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
Výše uvedené vytiskne IP adresu CIDR, pouze pokud je váš cíl $if
je UP, zapojený a má jeden. Pro ipv6 je řešení stejně jednoduché jen s drobnými úpravami.
Pokud se vám nelíbí sed
podobných výsledků byste mohli dosáhnout s jiným |pipe ... grep
a přidání -A
kontextová možnost na první grep
- ale líbí se mi sed
.