if else에 변수 IP 주소 전달

if else에 변수 IP 주소 전달

나는 다음 명령을 가지고 있습니다 :

ptr=`host $hostname`

결과는 다음과 같습니다.

test.tester.test has address 192.168.1.1

작동합니다!

지금 내가 원하는 것은 IP 주소(192.168.1.1)만 추출하여 $myptr 변수에 전달하고 다음 명령을 실행하는 것입니다.

if $myptr | sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' ; then
   host $myptr
else
   echo "No PTR Record found"
fi

그러나 이것은 작동하지 않습니다. 도와주세요?

답변1

의 출력에 대해 추가 텍스트 처리를 수행할 필요가 없으며 IP 주소만 가져오는 host데 사용할 수 있습니다 dig +short(그리고 필요한 IP 역방향 조회를 수행합니다).

dig +short "$hostname"

예를 들어

ip="$(dig +short "$hostname")"
host "$ip"

또는 직접적으로:

host "$(dig +short "$hostname")"

답변2

IP를 추출하려면 다음과 같이 호출할 수 있습니다.

ptr=`host $hostname | awk '/has address/ {print $NF}'`
  • /주소 있음/해당 문자열을 호스트로 사용하는 mach 라인은 더 많은 것을 반환할 수 있습니다. 예를 들어 Google을 사용해 보세요.
  • 인쇄$NF- NF는 필드 수를 반환하는 awk의 변수이므로 $NF는 마지막 필드를 가리킵니다.

그런 다음 grep을 사용하여 반환 코드를 확인할 수 있습니다(sed는 정규식을 찾든 못 찾든 0을 반환합니다. 따라서 다음이 작동합니다.

echo $ptr | egrep "your pattern"
if [ $? -eq 0 ]; then
    echo "This Works"
fi

하지만 간단히 확인할 수 있습니다$ptr출력이 포함되어 있습니다. 호스트 명령으로 아무것도 찾을 수 없는 경우$ptr비어 있으므로 다음과 같습니다.

if [ -n $ptr ]; then
    echo "Works"
else 
    echo "Not found :("
fi

보세요사람들 테스트:

-n STRING
          the length of STRING is nonzero
-z STRING
          the length of STRING is zero

관련 정보