ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Vì vậy, ở đây chúng tôi grep
là ip
công cụ phổ biến stdout
cho một dòng chứa cả giao diện quan tâm của chúng tôi và cụm từ "trạng thái LÊN" (cảm ơn @Lekensteyn vì đã chỉ ra sự cần thiết phải cụ thể hơn một chút so với chỉ UP
). Chúng tôi sử dụng đối số a
dưới dạng ngắn gọn address
và đủ để có được danh sách tất cả các card mạng được cấu hình trong hệ thống.
Một lợi thế khi sử dụng ip
có thể là nó thực sự có sẵn ở mọi nơi - ví dụ như cách tôi thường định cấu hình các thiết bị mạng Android của mình.
Chúng :colons
được sử dụng để tránh các phần trùng khớp - theo cách này, chúng tôi đảm bảo một trận đấu eth0
trái ngược với điều khác có thể someothereth0
hoặc eth007
.
Cảm ơn @RaphaelAhrens đã thúc đẩy tôi hướng đến sự đúng đắn và giải thích giải pháp của tôi.
CHỈNH SỬA:
Để xử lý các yêu cầu hiện tại bạn có thể:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
Ở trên sẽ chỉ in một địa chỉ IP CIDR nếu mục tiêu của bạn $if
là LÊN, cắm và có một địa chỉ. Đối với ipv6, giải pháp rất đơn giản chỉ với sửa đổi nhỏ.
Nếu bạn không thích, sed
bạn có thể đạt được kết quả tương tự với người khác |pipe ... grep
và thêm -A
tùy chọn ngữ cảnh vào lần đầu tiên grep
- nhưng tôi thích sed
.
cat /sys/class/net/ | grep eth0
sẽ cung cấp cho bạn dữ liệu dễ phân tích. Bạn cũng có thể làmsudo ethtool eth0 | grep Link