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
fabianox11

(usa Fedora)

Enviado em 24/03/2020 - 17:39h

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


  


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

Rogerio
RogerDez

(usa Outra)

Enviado em 25/03/2020 - 15:49h

o ping já vai dar uma mensagem de erro informando qual ping deu erro.
mas pelo visto você quer gerenciar o prórios erros.
da forma que vc está fazendo, não está pensando caso o ping saia com um outro erro que não seja o 1..

awk '{print $2}' "arq.txt" |
while read ip; do
if ping -c 1 $ip &>/dev/null; then
echo -e "\nMáquina $ip ON"
else
echo -e "\nMáquina $ip OFF" 1>&2
fi
done


ou

#dessa forma mostra todos os tipos de erros do ping e ignorar os ips que obtiveram sucesso
awk '{print $2}' "arq.txt" |
while read ip; do
ping -c 1 $ip 1>/dev/null #&& echo 'Máquina $ip OK'
done


o ping tem uma opção de deadline '-w' interessante, e uma opção de quiet '-q', assim vc deixa o próprio ping te dizer se foi sucesso ou nao..
ainda você poderia querer ver a opção de que setar as opções da shell para detectar quais os erros do pipeline (set pipefail)..


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 25/03/2020 - 20:46h


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
______________________________________________________________________


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

Fabiano
fabianox11

(usa Fedora)

Enviado em 27/03/2020 - 10:22h

RogerDez escreveu:

o ping já vai dar uma mensagem de erro informando qual ping deu erro.
mas pelo visto você quer gerenciar o prórios erros.
da forma que vc está fazendo, não está pensando caso o ping saia com um outro erro que não seja o 1..

awk '{print $2}' "arq.txt" |
while read ip; do
if ping -c 1 $ip &>/dev/null; then
echo -e "\nMáquina $ip ON"
else
echo -e "\nMáquina $ip OFF" 1>&2
fi
done


ou

#dessa forma mostra todos os tipos de erros do ping e ignorar os ips que obtiveram sucesso
awk '{print $2}' "arq.txt" |
while read ip; do
ping -c 1 $ip 1>/dev/null #&& echo 'Máquina $ip OK'
done


o ping tem uma opção de deadline '-w' interessante, e uma opção de quiet '-q', assim vc deixa o próprio ping te dizer se foi sucesso ou nao..
ainda você poderia querer ver a opção de que setar as opções da shell para detectar quais os erros do pipeline (set pipefail)..


Bom dia RogerDez,

Suas 2 sugestões não funcionaram como planejo pois elas ainda não trazem as respostas que pretendo que são: mesmo que sejam repostas negativas, a saida deverá ser +- desta forma: Estacao + IP ON ou Estacao + IP OFF. Elas trazem somente o IP. Mas de certa forma agradeço pela ideia.


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

Fabiano
fabianox11

(usa Fedora)

Enviado em 27/03/2020 - 10:33h

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


6. 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 27/03/2020 - 19:24h


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
______________________________________________________________________


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

Fabiano
fabianox11

(usa Fedora)

Enviado em 28/03/2020 - 09:51h

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


8. 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 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
______________________________________________________________________


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

Fabiano
fabianox11

(usa Fedora)

Enviado em 04/04/2020 - 19:28h

msoliver escreveu:


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
______________________________________________________________________


Boa noite MsOliver, (MELHOR RESPOSTA)

Script funcionou quando alterei a chamada de "sh script.sh" para "./script.sh"

Muito obrigado pela ajuda!!!

Sucesso sempre!!!

PS: deixei na saudação marcado como melhor resposta pois não sei como marcar aqui.

Sds,
Fabiano Lima


10. 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 04/04/2020 - 19:39h


fabianox11 escreveu:

msoliver escreveu:


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
______________________________________________________________________


Boa noite MsOliver, (MELHOR RESPOSTA)

Script funcionou quando alterei a chamada de "sh script.sh" para "./script.sh"

Muito obrigado pela ajuda!!!

Sucesso sempre!!!

PS: deixei na saudação marcado como melhor resposta pois não sei como marcar aqui.

Sds,
Fabiano Lima

Bom noite Fabiano.
Existem algumas diferenças entre o "sh" e o "bash", por isso não funcionava....
bom que resolveu....
Para escolher a melhor resposta,
O tópico tem que ser marcado como resolvido....


______________________________________________________________________
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts