Shell script usando o wget

13. Re: Shell script usando o wget

Paulo
paulo1205

(usa Ubuntu)

Enviado em 31/03/2016 - 16:57h

andrecosta62 escreveu:

Não funcionou! ele deu um erro:

./teste.sh: line 9: [: -eq: unary operator expected
ERRO


Esse erro é um erro de construção no shell. Minha dica é que você SEMPRE coloque a avaliação de variáveis entre aspas, porque se a variável não estiver definida ou tiver um valor nulo, a presença das aspas faz toda a diferença.

for var in exemplo teste ""; do
# Uso adequado, mesmo que “var” seja vazio ou indefinido: com aspas
[ "$var" = exemplo ] && echo "É 'exemplo'." || echo "Não é 'exemplo', é '$var'."

# Uso perigoso quando “var” for vazio ou indefinido: sem aspas
[ $var = exemplo ] && echo "É 'exemplo'." || echo "Não é 'exemplo', é '$var'."
done


O resultado da execução é o seguinte:

É 'exemplo'.
É 'exemplo'.
Não é 'exemplo', é 'teste'.
Não é 'exemplo', é 'teste'.
Não é 'exemplo', é ''.
bash: [: =: unary operator expected


Para esclarecer: quando você substitui um valor vazio ou indefinido entre aspas, o shell entende como um argumento existente, mas com tamanho zero. Sem aspas, ele simplesmente não coloca nada naquele lugar. No caso acima, o segundo comando [ é chamado como e fosse simplesmente “[ = exemplo ]”, sem argumento no lado esquerdo da comparação, o que é um erro.

Que tipo de comando eu posso usar para me trazer somente o resultado que a pagina funcionou ou não funcinou?


Eu mostrei o comando numa postagem anterior. Só não usei o wget, mas sim o curl, que é melhor para esse tipo de coisa.

só preciso criar um script dando um wget dizendo que a pagina funcionou ( no caso a pagina estar no ar) e não funcionou ( pagina fora do ar)


Como eu disse na outra postagem, o curl é mais amigável para uso em scripts do que o wget. Você tem mesmo de usar wget? Se tem, procure fazer algo semelhante ao que eu mostrei usando o curl.


  


14. Re: Shell script usando o wget

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 31/03/2016 - 17:00h

andrecosta62 escreveu:

msoliver escreveu:

andrecosta62 escreveu:

Galera Bom dia!
Meus conhecimentos em shell não é nada avançado, meu conhecimento é básico e gostaria muito de uma ajuda de vocês. È o seguinte:
Tenho a URL: wget http://www.atp.com.br/extranet/servicoBanco/service.asmx
O resultado tem que ser = 200, caso o resultado for diferente de 200 tem que dá erro.
EU tentei:

#!/bin/bash
$resultado = wget http://www.atp.com.br/extranet/servicoBanco/service.asmx
if [ $resultado = 200 ]; then
echo OK
else
echo ERRO
fi
Eu sei que falta bastante coisa, porém nao consigo avançar. poderiam me ajudar?
Obrigado galera pela ajuda!

-------------------------------------
Boa tarde.
Para definir a VARIÁVEL "resultado", faça:
resultado=$(wget http://www.atp.com.br/extranet/servicoBanco/service.asmx) 

O teste condicional:
if [ $resultado -eq 200 ]; then
echo OK
else
echo ERRO
fi


RECOMENDO:
http://aurelio.net/shell/canivete/ 


----------------------------------------------------------------------------------------
Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como a MELHOR, dessa forma, ganho uns pontinhos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo

Marcelo não funcionou...

----------------------------------------------------
Boa tarde!
Não testei a URL, nem tampouco o comando wget utilizado.
Somente coloquei a sintaxe correta na definição da VAR
e alterei o "TEST", trocando = por -eq

att.:
marcelo




15. Re: Shell script usando o wget

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/03/2016 - 20:52h

paulo1205 escreveu:

listeiro_037 escreveu:

Não estou acostumado com o curl.

Fui testar ele jogando a saída prá variável e ... ele jogou o stream HTML todo para $resultado.


Com uma linha de comando diferente da que eu sugeri, certo? Porque na que eu sugeri, eu joguei a resposta para /dev/null com a opção -o, e mandei imprimir apenas o código de resposta HTTP com a opção -w. E funciona!


Foi isto mesmo.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



16. Re: Shell script usando o wget

Andre
andrecosta62

(usa Outra)

Enviado em 01/04/2016 - 10:35h

patrickpcs escreveu:

Cara, deixa ver se eu entendi o que você está desejando.
Você quer fazer o download desse arquivo que está nessa url e verificar se o download foi bem sucedido? Se for isso, eis as minhas dicas.....

Todo comando quando executado, emite uma saída de status. Se for bem executado independentemente de qual comando for, a saída é sempre = 0. Qualquer outro valor informado no status de saída do comando significa algum erro, ai já varia de programa para programa, comando para comando.

Como saber o status de saída de um comando? Simples, pelo próprio terminal você pode ter uma ideia do funcionamento. Digite o comando ping localhost, e deverá ser bem sucedido, logo em seguida você executa um echo $?. O valor dessa "variável" é o status de saída do último comando executado e como eu tenho fé que o comando ping localhost deverá ser bem sucedido você ira ver o valor 0. Caso você dê um ping em um endereço inválido, o status de saída será diferente. Veja esse exemplo aqui....

patrick@X550LN:~$ ping -c 2 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.027 ms

--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.027/0.028/0.030/0.005 ms
patrick@X550LN:~$ echo $?
0
patrick@X550LN:~$ ping babao
ping: unknown host babao
patrick@X550LN:~$ echo $?
2
patrick@X550LN:~$



Pegou a ideia? Certo...e o que isso tem a ver com o seu problema? Bem, veja só.
Como o "if" funciona na verdade em shell script?
O "if" analisa o status de saída do comando posterior ao "if", o que algumas pessoas não atentam ou professores não explicam é que a sintaxe if [condição]; then na verdade é um facilitador digamos assim para o comando test. Ou seja....
isso
if [ $resultado -eq 200 ]; then
é igual a isso
if test $resultado -eq 200 ; then


O comando test que tem as funcionalidades de comparação entre outras coisas e o IF apenas faz uma análise do status de saída do comando test.
Se o status de saída for 0, quer dizer que é verdade, se for diferente de 0, quer dizer que não é verdade.

Então se você quer saber se o comando wget foi executado com sucesso, você tem que pegar o valor do status de saída do comando wget e jogar isso para a condicional IF.
Existem duas formas de fazer isso. Você pode fazer parecido do seu jeito, jogando o status de saída para dentro de uma outra variável (aquela $resultado) e depois fazer a comparação...
Ou de uma forma que eu particularmente acho mais elegante.
Esqueça o comando test e suas comparações, faça o if analisar diretamente o comando que você está executando.....por exemplo com o comando ping...
No caso abaixo eu joguei a saída de tela para o /dev/null para não ficar aparecendo um monte de informações na tela.

if ping -c 2 localhost > /dev/null; then
echo "ping bem sucedido"
else
echo "falha no ping"
fi


Então se a minha interpretação do seu post estiver correta, essa é a solução...

 
if wget http://www.atp.com.br/extranet/servicoBanco/service.asmx > /dev/null; then
echo "download efetuado com sucesso."
else
echo "falha no download!!!"
fi

http://goo.gl/g6NiFp

-----------------------------------------------------------------------------------------------------------------------------------
Bom dia patrick, tudo bem? cara obrigado pela ajuda! o código funciona, mais o que eu preciso é que quando eu execute o script me traz somente o resultado do ECHO, conforme exemplo acima.

Quando eu executar o script dando um ./teste.sh eu preciso que ele me traga o resultado somente do echo.
por exemplo: quando eu executar ./teste.sh e conseguir fazer o download me retornar somente o resultado: "download efetuado com sucesso."
e se por acaso der erro me retorna somente a mensagem: "falha no download!!!"

Pois quando eu executo aqui ele me retorna todo o conteudo da pagina + o download e embaixo e mostra que o "download efetuado com sucesso" ou seja ele nao retorna somente o echo entendeu?? espero que sim rsrs..





17. Re: Shell script usando o wget

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/04/2016 - 13:34h

andrecosta62 escreveu:

patrickpcs escreveu:

Cara, deixa ver se eu entendi o que você está desejando.
Você quer fazer o download desse arquivo que está nessa url e verificar se o download foi bem sucedido? Se for isso, eis as minhas dicas.....

Todo comando quando executado, emite uma saída de status. Se for bem executado independentemente de qual comando for, a saída é sempre = 0. Qualquer outro valor informado no status de saída do comando significa algum erro, ai já varia de programa para programa, comando para comando.

Como saber o status de saída de um comando? Simples, pelo próprio terminal você pode ter uma ideia do funcionamento. Digite o comando ping localhost, e deverá ser bem sucedido, logo em seguida você executa um echo $?. O valor dessa "variável" é o status de saída do último comando executado e como eu tenho fé que o comando ping localhost deverá ser bem sucedido você ira ver o valor 0. Caso você dê um ping em um endereço inválido, o status de saída será diferente. Veja esse exemplo aqui....

patrick@X550LN:~$ ping -c 2 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.027 ms

--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.027/0.028/0.030/0.005 ms
patrick@X550LN:~$ echo $?
0
patrick@X550LN:~$ ping babao
ping: unknown host babao
patrick@X550LN:~$ echo $?
2
patrick@X550LN:~$



Pegou a ideia? Certo...e o que isso tem a ver com o seu problema? Bem, veja só.
Como o "if" funciona na verdade em shell script?
O "if" analisa o status de saída do comando posterior ao "if", o que algumas pessoas não atentam ou professores não explicam é que a sintaxe if [condição]; then na verdade é um facilitador digamos assim para o comando test. Ou seja....
isso
if [ $resultado -eq 200 ]; then
é igual a isso
if test $resultado -eq 200 ; then


O comando test que tem as funcionalidades de comparação entre outras coisas e o IF apenas faz uma análise do status de saída do comando test.
Se o status de saída for 0, quer dizer que é verdade, se for diferente de 0, quer dizer que não é verdade.

Então se você quer saber se o comando wget foi executado com sucesso, você tem que pegar o valor do status de saída do comando wget e jogar isso para a condicional IF.
Existem duas formas de fazer isso. Você pode fazer parecido do seu jeito, jogando o status de saída para dentro de uma outra variável (aquela $resultado) e depois fazer a comparação...
Ou de uma forma que eu particularmente acho mais elegante.
Esqueça o comando test e suas comparações, faça o if analisar diretamente o comando que você está executando.....por exemplo com o comando ping...
No caso abaixo eu joguei a saída de tela para o /dev/null para não ficar aparecendo um monte de informações na tela.

if ping -c 2 localhost > /dev/null; then
echo "ping bem sucedido"
else
echo "falha no ping"
fi


Então se a minha interpretação do seu post estiver correta, essa é a solução...

 
if wget http://www.atp.com.br/extranet/servicoBanco/service.asmx > /dev/null; then
echo "download efetuado com sucesso."
else
echo "falha no download!!!"
fi

http://goo.gl/g6NiFp

-----------------------------------------------------------------------------------------------------------------------------------
Bom dia patrick, tudo bem? cara obrigado pela ajuda! o código funciona, mais o que eu preciso é que quando eu execute o script me traz somente o resultado do ECHO, conforme exemplo acima.

Quando eu executar o script dando um ./teste.sh eu preciso que ele me traga o resultado somente do echo.
por exemplo: quando eu executar ./teste.sh e conseguir fazer o download me retornar somente o resultado: "download efetuado com sucesso."
e se por acaso der erro me retorna somente a mensagem: "falha no download!!!"
Pois quando eu executo aqui ele me retorna todo o conteudo da pagina + o download e embaixo e mostra que o "download efetuado com sucesso" ou seja ele nao retorna somente o echo entendeu?? espero que sim rsrs..

Boa tarde andrecosta62.
Com uma pequena alteração no comando sugerido pelo Patrick, chega-se ao resultado desejado:
if wget -q http://www.atp.com.br/extranet/servicoBanco/service.asmx ; then
echo "download efetuado com sucesso."
else
echo "falha no download"
fi

Onde:
  -q,  --quiet                     quiet (no output). 

Fonte:
wget --help|egrep ^'[ ]+-[A-Za-z]+|^[A-Z][a-z]+:'|sed 's/^[ ]\+//' 

Att.:
Marcelo





18. Re: Shell script usando o wget

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 01/04/2016 - 15:49h

Pra retornar o status da requisição, faça assim:

wget --spider -S 'http://www.atp.com.br/extranet/servicoBanco/service.asmx' > /dev/null 2>&1 | grep 'HTTP/' | awk '{print $2}' 



19. Re: Shell script usando o wget

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/04/2016 - 17:32h

andrecosta62 escreveu:
Galera Bom dia!
Meus conhecimentos em shell não é nada avançado, meu conhecimento é básico e gostaria muito de uma ajuda de vocês. È o seguinte:
Tenho a URL: wget http://www.atp.com.br/extranet/servicoBanco/service.asmx
O resultado tem que ser = 200, caso o resultado for diferente de 200 tem que dá erro. EU tentei:
#!/bin/bash
$resultado = wget http://www.atp.com.br/extranet/servicoBanco/service.asmx
if [ $resultado = 200 ]; then
echo OK
else
echo ERRO
fi
Eu sei que falta bastante coisa, porém nao consigo avançar. poderiam me ajudar?
Obrigado galera pela ajuda!

----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
Boa tarde, andrecosta62.
Com o comando abaixo, vc obtém o "200 OK", caso o acesso seja concluído . . .
wget --spider -nv -o messages.txt 'http://www.terra.com.br';if egrep -o '200 OK$' messages.txt;then echo -e "ACESSO CONCLUÍDO COM SUCESSO";else echo "PROBLEMAS NO ACESSO:\n$(cat messages.txt)";fi
200 OK
ACESSO CONCLUÍDO COM SUCESSO


wget --spider -nv -o messages.txt 'http://www.momomo.com.br';if egrep -o '200 OK$' messages.txt;then echo -e "ACESSO CONCLUÍDO COM SUCESSO";else echo -e "PROBLEMAS NO ACESSO:\n$(cat messages.txt)";fi
PROBLEMAS NO ACESSO:
wget: não foi possível resolver endereço de máquina “www.momomo.com.br”


 wget --spider -nv -o messages.txt 'http://www.atp.com.br/extranet/servicoBanco/service.asmx';if egrep -o '200 OK$' messages.txt;then echo -e "ACESSO CONCLUÍDO COM SUCESSO";else echo -e "PROBLEMAS NO ACESSO:\n$(cat messages.txt)";fi
PROBLEMAS NO ACESSO:
http://www.atp.com.br/extranet/servicoBanco/service.asmx:
O arquivo remoto não existe -- link quebrado!!!


Agora eu testei, senão "tomo" bronca e fico de castigo. Rsrsrs.

----------------------------------------------------------------------------------------
Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como a MELHOR, dessa forma, ganho uns pontinhos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------

Abç.;
Marcelo oliver





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts