Script que pinga uma lista de ips e nas respostas (positivas ou negativas) traga, alem do IP, também

1. Script que pinga uma lista de ips e nas respostas (positivas ou negativas) traga, alem do IP, também

Fabiano Bezerra Lima
fabiano12

(usa Ubuntu)

Enviado em 22/01/2020 - 10:56h

Senhores bom dia,

Tenho um script que faz um ping numa lista de ips (arquivo.txt). Até aí ela funciona perfeitamente. O problema é que agora, nesta lista, também ha o nome da estação junto. Exemplo de como é a lista, abaixo:

192.168.20.31;CPU1
192.168.20.32;CPU2
192.168.20.33;CPU3 e por aí vai.

O script que tenho é este abaixo:
#!/bin/bash

CPUs=(`cat arquivo.txt | awk -F ";" '{print $1}'`)
for ((i = 0; i < ${#CPUs[@]}; i++)); do

ping -q -c1 "${CPUs[i]}" &> /dev/null

case "$?" in
'0') STATUS="OK" ;;
'1') STATUS="FORA DE ALCANCE" ;;
*) STATUS="ERRO" ;;
esac
echo "ESTACAO: ${CPUs[i]} [${STATUS}]"
done

O que estou pretendendo é: que a cada resposta de ping, seja positivo ou negativo, ele traga, além do IP, o nome da estação junto. Hoje a resposta é:
ESTACAO: 192.168.20.31 [OK]
ESTACAO: 192.168.20.32 [OK]
ESTACAO: 192.168.20.33 [FORA DE ALCANCE]

O que pretendo:
ESTACAO: 192.168.20.31/CPU1 [OK]
ESTACAO: 192.168.20.32/CPU2 [OK]
ESTACAO: 192.168.20.33/CPU3 [FORA DE ALCANCE]

Alguem teria uma ideia de como montar estas respostas? Tentei algumas coisas aqui mas sem exito.

Certo da atenção.

Sds,
Fabiano Lima


  


2. Re: Script que pinga uma lista de ips e nas respostas (positivas ou negativas) traga, alem do IP, ta

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 24/01/2020 - 16:56h

Tente assim:

$ cat lista_de_ips
192.168.20.31;CPU1
192.168.20.32;CPU2
192.168.20.33;CPU3


#!/bin/sh
bkp_IFS=$IFS
IFS="$IFS;"

while read ip nome; do
ping -nr -W 3 -c 1 $ip >&- 2>&-
[ $? -eq 0 ] && echo "Estacao: ${ip}/$nome [On-line]" || echo "Estacao: ${ip}/$nome [Off-line]"
done < lista_de_ips

IFS=$bkp_IFS



3. Re: Script que pinga uma lista de ips e nas respostas (positivas ou negativas) traga, alem do IP, também

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 24/01/2020 - 22:28h


fabiano12 escreveu:

Senhores bom dia,

Tenho um script que faz um ping numa lista de ips (arquivo.txt). Até aí ela funciona perfeitamente. O problema é que agora, nesta lista, também ha o nome da estação junto. Exemplo de como é a lista, abaixo:

192.168.20.31;CPU1
192.168.20.32;CPU2
192.168.20.33;CPU3 e por aí vai.

O script que tenho é este abaixo:
#!/bin/bash

CPUs=(`cat arquivo.txt | awk -F ";" '{print $1}'`)
for ((i = 0; i < ${#CPUs[@]}; i++)); do

ping -q -c1 "${CPUs[i]}" &> /dev/null

case "$?" in
'0') STATUS="OK" ;;
'1') STATUS="FORA DE ALCANCE" ;;
*) STATUS="ERRO" ;;
esac
echo "ESTACAO: ${CPUs[i]} [${STATUS}]"
done

O que estou pretendendo é: que a cada resposta de ping, seja positivo ou negativo, ele traga, além do IP, o nome da estação junto. Hoje a resposta é:
ESTACAO: 192.168.20.31 [OK]
ESTACAO: 192.168.20.32 [OK]
ESTACAO: 192.168.20.33 [FORA DE ALCANCE]

O que pretendo:
ESTACAO: 192.168.20.31/CPU1 [OK]
ESTACAO: 192.168.20.32/CPU2 [OK]
ESTACAO: 192.168.20.33/CPU3 [FORA DE ALCANCE]

Alguem teria uma ideia de como montar estas respostas? Tentei algumas coisas aqui mas sem exito.

Certo da atenção.

Sds,
Fabiano Lima

Boa noite Fabiano, segue sugestão:
#!/bin/bash
while IFS=";" read -a campo;do
if ping -c1 ${campo[0]} &>/dev/null;then
stt="OK";
else
stt="ERRO";
fi
echo "${campo[0]} ${campo[1]} $stt";
done<lista.txt


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts