밝히다:

밝히다:

스크립트가 구성되어 있는지 확인해야 합니다 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

관련 정보