msoliver
(usa Debian)
Enviado em 28/03/2020 - 19:21h
fabianox11 escreveu:
msoliver escreveu:
fabianox11 escreveu:
msoliver escreveu:
fabianox11 escreveu:
Boa tarde a todos,
Gostaria de uma ajuda para formular uma saida de script deste forma:
Tenho um arquivo que nele possui o nome da estação+ip separado por espaço (Ex.: Estacao1 192.168.20.31). No script, consigo realizar um ping separando por colunas com o awk. O que precisaria é que a cada resposta do ping (positiva ou negativa), ele traga o nome+ip. Segue abaixo o script utilizado:
VAR=$(cat arq.txt | awk '{print $2}')
for x in $VAR
do
ok=`ping -c 1 $x | grep transmitted, | cut -d" " -f4`
if [ $ok = 1 ]; then
echo -e "\nMáquina $x ON"
else
echo -e "\nMáquina $x OFF"
fi
done
Este script já modifiquei ele por algumas vezes para tentar obter o resultado mas sem sucesso.
OBS: este script foi retirado daqui mesmo do VOL de um colega que não peguei o nome mas agradeço a ideia dele!!!
Sds,
Fabiano12
Segue sugestão:
while IFS=" " read -r maq ip;do
if ping -c1 $ip 2>/dev/null;then
echo "$maq $ip On"
else
echo "$maq $ip Off"
fi
done<arq.txt
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
Bom dia MsOliver,
Sua sugestão me proporcionou a saida que pretendo porém, ele pára no primeiro IP do arquivo e não segue os demais.
Neste arquivo tem +- 15 linhas, uma embaixo da outra, que estão desta forma: Estação + IP. Ex.:
Estacao1 192.168.20.10
Estacao2 192.168.20.11
Estacao3 192.168.20.12
...
Neste caso, o uso do for resolveria? Se sim, qual seria a semantica do codigo?
Sds,
Fabiano12
Boa noite Fabiano.
O script esta perfeito....
exceto o direcionamento do ping, mas, nada que afete o bom funcionamento.
Corrigindo o direcionamento:
if ping -c1 $ip &>/dev/null;then
Bem provável que o problema esteja no arquivo com os IP's e nome das estações,
Pode ser o
IFS ou o
fim de linha .
Para certificar, poste a saída dos comandos:
file arquivo.txt
cat -A arquivo.txt
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
Bom dia MsOliver,
Saida do comando file arq.txt:
arq.txt: ASCII text
Saida do comando cat -A arq.txt:
Estacao1 192.168.20.10$
Estacao2 192.168.20.11$
Estacao3 192.168.20.12$
Sds,
Fabiano12
Boa noite Fabiano.
Aparentemente o arq.txt está correto, tanto no separador "IFS", qto no fim de linha.
Vamos aos testes:
Com o comando:
seq 10 25|xargs -i echo "Estacao_{} 192.168.20.{}" > ip.txt
Gero o arquivo "ip.txt"
Estacao_10 192.168.20.10
Estacao_11 192.168.20.11
. . .
Estacao_25 192.168.20.25
Script
#!/usr/bin/bash
while IFS=" " read -r pc ip;do
printf "%()T Testando: PC:$pc IP:$ip\n"
if ping -c1 $ip &>/dev/null;then
echo "$pc $ip On"
else
echo "$pc $ip Off"
fi
done<ip.txt
Testes no Terminal:
while IFS=" " read pc ip;do sleep 1; printf "[%()T] PC:$pc IP:$ip\n";done<ip.txt
Saída, lista todas as linhas com diferença de 1 segundo :
[19:03:54] PC:Estacao_10 IP:192.168.20.10
[19:03:55] PC:Estacao_11 IP:192.168.20.11
[19:03:56] PC:Estacao_12 IP:192.168.20.12.....
Duvida :
Como está executando/"chamando" o script?
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________