스크립트가 구성되어 있는지 확인해야 합니다 eth0
. 그렇다면 스크립트는 아무 작업도 수행하지 않습니다. 그렇지 않으면 시작됩니다 wlan0
. (두 사람이 eth0
동시에 일어나는 것을 원하지 않습니다 wlan0
.)
시작되었는지 확인하는 eth0
가장 쉬운 방법은 무엇입니까 ?
나는 데비안 Wheezy를 사용하고 있습니다
밝히다:
케이블이 eth0
연결되어 있는지 확인하고 싶을 뿐만 아니라 인터페이스가 구성되었는지(예: 고정 IP 설정이 있는지 또는 DHCP IP를 수신했는지) 확인하고 싶습니다. 케이블이 연결되어 있지만 eth0
구성이 올바르지 않은 경우 시작하고 싶습니다.wlan0
답변1
여러 가지 방법으로 이 작업을 수행할 수 있습니다. 예는 다음과 같습니다.
$ cat /sys/class/net/eth0/operstate
up
답변2
ip a show ethX up
아무것도 표시되지 않으면 인터페이스가 닫힌 것입니다
답변3
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
그래서 여기 있습니다grep
모든 방법입니다ip
도구stdout
관심 있는 인터페이스와 문구가 포함된 줄의 경우"상태 업"(단순한 내용뿐만 아니라 더 구체적인 내용의 필요성을 지적한 @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}'
위의 내용은 대상이 다음인 경우에만 CIDR IP 주소를 인쇄합니다.$if
예위로,삽입되어 하나 있습니다. ipv6의 경우 솔루션도 마찬가지로 간단하며 약간의 수정만 필요합니다.
마음에 들지 않으면sed
다른 것으로도 비슷한 결과를 얻을 수 있습니다|pipe ... grep
그리고-A
첫 번째 컨텍스트 옵션grep
- 그러나 나는 그것이 좋다sed
.
답변4
다른 방법은 작동하지 않지만 이 방법은 작동합니다(적어도 Ubuntu에서는).
while true; do
ip route | grep "linkdown"
if [ $? -eq 0 ]; then
sleep 1 # network not yet up
else
break # network up
fi
done