나는 다음 명령을 가지고 있습니다 :
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