쉘 스크립트를 사용하여 인터넷에 연결되어 있는지 확인하려고 합니다. 나는 이것을 사용하여 이것을 할 수 있다고 생각한다.평평한명령을 실행하면 ping이 성공하면 괄호 안에 IP 정보가 표시되기 때문입니다. 대괄호가 없으면 다음을 사용합니다.자르다이 명령은 특정 변수를 할당하며, 이 경우 변수는 비어 있게 됩니다.
그래서 다음 코드를 작성했습니다.
echo " First check whether internet is working or not : "
internetCheck=$(ping -c 1 google.com | cut -s -d "(" -f1)
if [ -z "$internetCheck" ]; then
echo "NO INTERNET CONNECTION FOUND !"
else
echo "[ OK ] Internet is connected.\n"
fi
효과가 있었습니다. 그런데 연결을 끊고 같은 웹사이트(google.com)에 대해 스크립트를 반복하면 시스템(?)이 마지막 ping 명령의 결과를 기억하고 있어서 실패하게 됩니다. 이전 핑 결과를 정리/새로 고치는 방법은 무엇입니까?
답변1
더 나은 테스트, grep 필요 없음...
echo " First check whether internet is working or not : "
if ping -q -c 1 <host> > /dev/null 2>&1 ; then
echo "[ OK ] Internet is connected.\n"
else
echo "NO INTERNET CONNECTION FOUND !"
fi
답변2
이름을 IP 주소로 변환하는 작업은 일반적으로 로컬 DNS 확인자에 의해 수행되며 캐시됩니다. 그렇기 때문에 연결되어 있지 않아도 주소를 알 수 있습니다.
더 나은 옵션은 100% packet loss
수정된 스크립트 버전입니다.
echo " First check whether internet is working or not : "
if ping -c 1 google.com | grep -qE '100% packet loss|Temporary failure in name resolution' ; then
echo "NO INTERNET CONNECTION FOUND !"
else
echo "[ OK ] Internet is connected.\n"
fi