Como usar a saída do grep para ping

0

Eu desesperadamente tentar usar a saída do grep para um script:

ping dc"$(grep -o .""\[12].domain.local"" /etc/squid3/squid.conf)"

ping "$(grep -o ""dc0\[12].domain.local"" /etc/squid3/squid.conf)"

Ambos retornam:

ping: unknown host dc02.domain.local

Se eu digitar ping dc02.domain.local , funciona! Eu não posso ver o que estou fazendo errado?

A linha relevante do /etc/squid3/squid.conf é:

external_acl_type memberof %LOGIN /usr/lib/squid3/squid_ldap_group -R -K -b "dc=domain,dc=local" -D [email protected] -W /aaa/bbb/ccc.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%g,ou=aaa,ou=bbb,ou=ccc,ou=ddd,ou=eee,dc=domain,dc=local))" -h dc02.domain.local
    
por Martin Rienesl 16.09.2015 / 16:32

2 respostas

1

O motivo da falha é que o arquivo /etc/squid3/squid.conf contém mais de uma linha correspondente ao padrão. Então quando você faz

ping "$(grep ....)"

todas as correspondências separadas por nova linha estão sendo passadas como um único argumento para ping , o que leva apenas um único endereço de cada vez como argumento, portanto, está falhando.

Note que, em vez de usar o padrão Regex que você usou, você pode simplificar a correspondência da última palavra usando:

grep -o 'dc[^ ]\+$' /etc/squid3/squid.conf

assumindo que a palavra comece com dc .

Finalmente, como você tem vários endereços para executar ping over, você deve usar um loop:

for i in $(grep -o 'dc[^ ]\+$' /etc/squid3/squid.conf); do ping -c 4 "$i"; done

ping -c 4 enviará 4 pacotes ICMP Echo_Request para cada destino.

    
por heemayl 16.09.2015 / 18:12
0

Você também pode usar awk

awk -F'-h ' '/-h +dc0[12]/ {system("ping -c 3 "$2)}'
  • -F'-h '

    Estamos interessados apenas no que está por trás de -h .

  • /-h +dc0[12]\.domain\.local/

    Estamos interessados apenas na string dc01.domain.local e dc02.domain.local

por A.B. 16.09.2015 / 20:05