ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
तो यहाँ हम grep
एक सर्वव्यापी ip
टूल के stdout
लिए हैं, जिसमें हमारी रुचि का इंटरफ़ेस और "स्टेट यूपी" वाक्यांश शामिल हैं (@Lekensteyn के लिए धन्यवाद, बस थोड़ा अधिक विशिष्टता की आवश्यकता को इंगित करने के लिए UP
)। हम तर्क a
का संक्षिप्त रूप में उपयोग करते हैं address
और यह सिस्टम में सभी कॉन्फ़िगर किए गए नेटवर्क कार्डों की एक सूची प्राप्त करने के लिए पर्याप्त होना चाहिए।
उपयोग करने का एक फायदा ip
यह हो सकता है कि यह वास्तव में हर जगह उपलब्ध होना चाहिए - यह है कि मैं आमतौर पर अपने एंड्रॉइड फोन के नेटवर्क उपकरणों को कैसे कॉन्फ़िगर करता हूं, उदाहरण के लिए।
:colons
आंशिक मिलान से बचने के लिए उपयोग किया जाता है - इस तरह से हम के लिए एक मैच की गारंटी eth0
के रूप में एक अन्यथा संभव करने का विरोध कियाsomeothereth0
या eth007
।
शुक्रिया @RaphaelAhrens मुझे शुचिता की ओर ले जाने और मेरा समाधान समझाने के लिए।
संपादित करें:
वर्तमान आवश्यकताओं को संभालने के लिए आप कर सकते हैं:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
ऊपर केवल एक सीआईडीआर आईपी पते प्रिंट होगा यदि आपका लक्ष्य $if
है उत्तर प्रदेश, प्लग इन है और एक । IPv6 के लिए समाधान केवल मामूली संशोधन के साथ सरल है।
यदि आपको पसंद नहीं है sed
तो आप दूसरे के साथ भी इसी तरह के परिणाम प्राप्त कर सकते हैं |pipe ... grep
और -A
पहले के लिए एक संदर्भ विकल्प जोड़ सकते हैं grep
- लेकिन मुझे पसंद है sed
।
cat /sys/class/net/ | grep eth0
आपको ईजीली पार्सबल डेटा देना चाहिए। आप यह भी कर सकते हैंsudo ethtool eth0 | grep Link