Passa o endereço IP da variável para if else

1

Eu tenho este comando:

ptr='host $hostname'

O que resulta disso:

test.tester.test has address 192.168.1.1

Isso funciona!

O que eu quero agora é extrair apenas o endereço IP (192.168.1.1), passá-lo para a variável $ myptr e execute o seguinte comando:

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

Mas isso não funciona. Por favor ajude?

    
por user2720970 20.09.2016 / 07:32

2 respostas

4

Você não precisa de nenhum processamento de texto extravagante na saída de host , você pode usar apenas dig +short para obter apenas o endereço IP (e fazer a pesquisa reversa necessária no IP).

dig +short "$hostname"

por exemplo,

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

Ou diretamente:

host "$(dig +short "$hostname")"
    
por 20.09.2016 / 07:40
0

Para extrair o ip você pode usar o awk por exemplo:

ptr='host $hostname | awk '/has address/ {print $NF}''
  • / has address / mach apenas a linha que possui essa string, já que o host pode retornar muito mais para você. Tente o google por exemplo.
  • print $ NF - NF é a variável do awk que retorna o número de campos, então $ NF aponta para o último campo.

Em seguida, você pode usar o grep e verificar seu código de retorno (o sed retornará 0 regardles se ele encontrar o seu regexp ou não. Então, fazer algo assim funcionaria:

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

Mas você pode simplesmente verificar se $ ptr contém uma saída. Se o comando do host não encontrar nada, $ ptr estará vazio, então:

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

Dê uma olhada no man test :

-n STRING
          the length of STRING is nonzero
-z STRING
          the length of STRING is zero
    
por 20.09.2016 / 08:00