ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing 
ดังนั้นที่นี่เราgrepเป็นipเครื่องมือที่ใช้กันแพร่หลายstdoutสำหรับบรรทัดที่มีทั้งส่วนติดต่อที่น่าสนใจและวลี"state UP" (ขอบคุณ @Lekensteyn ที่ชี้ให้เห็นถึงความต้องการความเฉพาะเจาะจงมากกว่าเพียงเล็กน้อยUP) เราใช้อาร์กิวเมนต์aเป็นรูปแบบย่อaddressและควรจะเพียงพอที่จะรับรายการการ์ดเครือข่ายที่กำหนดค่าไว้ทั้งหมดในระบบ
ข้อดีอย่างหนึ่งของการใช้งานคือipสามารถใช้งานได้ทุกที่ - เป็นวิธีที่ฉันกำหนดค่าอุปกรณ์เครือข่ายโทรศัพท์ Android ของฉัน
:colonsถูกนำมาใช้เพื่อหลีกเลี่ยงการแข่งขันบางส่วน - ในลักษณะนี้เรารับประกันการแข่งขันeth0เมื่อเทียบกับอย่างอื่นที่เป็นไปได้หรือsomeothereth0eth007
ขอบคุณ @RaphaelAhrens ที่คอยผลักดันฉันไปสู่ความถูกต้องและอธิบายวิธีแก้ปัญหาของฉัน
แก้ไข:
เพื่อจัดการกับข้อกำหนดปัจจุบันคุณสามารถ:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
ข้อมูลด้านบนจะพิมพ์ที่อยู่ IP ของ CIDR หากเป้าหมายของคุณ$ifเป็นUP,เสียบปลั๊กและมีที่อยู่หนึ่งรายการ สำหรับ ipv6 การแก้ปัญหานั้นง่ายเพียงแค่ปรับเปลี่ยนเล็กน้อยเท่านั้น
ถ้าคุณไม่ชอบsedคุณสามารถบรรลุผลที่คล้ายกันกับคนอื่น|pipe ... grepและเพิ่ม-Aตัวเลือกบริบทแรกgrep- sedแต่ผมชอบ
               
              
cat /sys/class/net/ | grep eth0ควรให้ข้อมูลที่แยกวิเคราะห์ได้ง่ายขึ้น คุณสามารถทำได้sudo ethtool eth0 | grep Link