ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
그래서 여기서 우리 grep
는 관심있는 인터페이스와 "상태 UP" 이라는 문구를 모두 포함하는 라인을위한 유비쿼터스 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
이 작동 중이고 연결되어 있고 하나 가있는 경우 CIDR IP 주소 만 인쇄합니다 . ipv6의 경우 솔루션은 약간만 수정하면 간단합니다.
마음에 들지 않으면 sed
다른 것과 비슷한 결과를 얻을 수 있고 첫 번째에 컨텍스트 옵션을 |pipe ... grep
추가 할 -A
수는 grep
있지만 좋아 sed
합니다.
cat /sys/class/net/ | grep eth0
파싱 가능한 데이터를 제공해야합니다. 당신은 또한 할 수 있습니다sudo ethtool eth0 | grep Link