bash 스크립트에서 ping을 사용하여 호스트 가용성 확인
하루 종일 온라인 상태 여야하는 네트워크의 장치가 실제로 온라인 상태인지 계속 확인하는 스크립트를 작성하고 싶습니다. 핑을 사용하려고했지만
if [ "`ping -c 1 some_ip_here`" ]
then
echo 1
else
echo 0
fi
제공하지 않습니다 1
상관없이 내가 유효하거나 유효하지 않은 IP 주소를 입력합니다. 특정 주소 (또는 IP 주소 목록에서 더 나은 장치)가 오프라인 상태인지 어떻게 확인할 수 있습니까?
Ping은 오류 유형에 따라 다른 종료 코드를 반환합니다.
ping 256.256.256.256 ; echo $?
# 68
ping -c 1 127.0.0.1 ; echo $?
# 0
ping -c 1 192.168.1.5 ; echo $?
# 2
0은 호스트에 연결할 수 있음을 의미합니다.
2는 연결할 수 없음을 의미합니다.
if 문에는 백틱이 필요하지 않습니다. 이 수표를 사용할 수 있습니다
if ping -c 1 some_ip_here &> /dev/null
then
echo 1
else
echo 0
fi
if 명령은 다음 명령 (ping)의 종료 코드를 확인합니다. 종료 코드가 0이면 (명령이 성공적으로 종료되었음을 의미) then 블록이 실행됩니다. 0이 아닌 종료 코드를 반환하면 else 블록이 실행됩니다.
ping의 고급 버전 인 "fping"이 있습니다. 이는 시간 제한을 밀리 초 단위로 정의 할 수있는 가능성을 제공합니다.
#!/bin/bash
IP='192.168.1.1'
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
echo "Host found"
else
echo "Host not found"
fi
이렇게 달리는 라이너 하나를 생각할 수 있습니다
ping -c 1 127.0.0.1 &> /dev/null && echo success || echo fail
127.0.0.1을 IP 또는 호스트 이름으로 바꾸고, echo 명령을 두 경우 모두 수행해야하는 작업으로 바꾸십시오.
위의 코드는 성공할 것입니다. 액세스 할 수없는 IP 또는 호스트 이름으로 시도해보십시오.
이렇게 :
ping -c 1 google.com &> /dev/null && echo success || echo fail
이
ping -c 1 lolcatz.ninja &> /dev/null && echo success || echo fail
참고로 위의 방법을 사용하여 몇 가지 테스트를 수행했으며 멀티 핑 (10 개 요청)을 사용하는 경우
ping -c10 8.8.8.8 &> / dev / null; 에코 $?
다중 핑 명령의 결과는 핑 결과 중 하나 이상에 도달 할 수있는 경우 "0"이되고 모든 핑 요청에 도달 할 수없는 경우 "1"이됩니다.
up=`fping -r 1 $1 `
if [ -z "${up}" ]; then
printf "Host $1 not responding to ping \n"
else
printf "Host $1 responding to ping \n"
fi
'programing' 카테고리의 다른 글
JObject를 사전으로 변환 (0) | 2020.11.23 |
---|---|
Ubuntu Terminal을 통해 파일을 편집 / 저장하는 방법 (0) | 2020.11.23 |
Angularjs-DOM이로드 될 때까지 콘텐츠 숨기기 (0) | 2020.11.23 |
Pandas DataFrame 헤더에서 공백을 제거하려면 어떻게해야합니까? (0) | 2020.11.23 |
Font Awesome 아이콘을 'fa-5x'보다 크게 만들 수 있습니까? (0) | 2020.11.23 |