ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
ดังนั้นที่นี่เราgrep
เป็นip
เครื่องมือที่ใช้กันแพร่หลายstdout
สำหรับบรรทัดที่มีทั้งส่วนติดต่อที่น่าสนใจและวลี"state UP" (ขอบคุณ @Lekensteyn ที่ชี้ให้เห็นถึงความต้องการความเฉพาะเจาะจงมากกว่าเพียงเล็กน้อยUP
) เราใช้อาร์กิวเมนต์a
เป็นรูปแบบย่อaddress
และควรจะเพียงพอที่จะรับรายการการ์ดเครือข่ายที่กำหนดค่าไว้ทั้งหมดในระบบ
ข้อดีอย่างหนึ่งของการใช้งานคือip
สามารถใช้งานได้ทุกที่ - เป็นวิธีที่ฉันกำหนดค่าอุปกรณ์เครือข่ายโทรศัพท์ Android ของฉัน
:colons
ถูกนำมาใช้เพื่อหลีกเลี่ยงการแข่งขันบางส่วน - ในลักษณะนี้เรารับประกันการแข่งขันeth0
เมื่อเทียบกับอย่างอื่นที่เป็นไปได้หรือsomeothereth0
eth007
ขอบคุณ @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