Shell script usando o wget

1. Shell script usando o wget

Andre
andrecosta62

(usa Outra)

Enviado em 31/03/2016 - 11:48h

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!


  


2. Re: Shell script usando o wget

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 31/03/2016 - 12:08h

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


3. Re: Shell script usando o wget

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/03/2016 - 12:10h

O check_http do Nagios faz isso com maestria.

# /usr/local/nagios/libexec/check_http -H www.atp.com.br -u /extranet/servicoBanco/service.asmx
HTTP OK: HTTP/1.1 200 OK - 6094 bytes in 0,017 second response time |time=0,017191s;;;0,000000 size=6094B;;;0 


https://exchange.nagios.org/directory/Plugins/Network-Protocols/HTTP/check_http-perl-script/details



4. Re: Shell script usando o wget

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/03/2016 - 12:13h

Aqui deu uma variável declarada string e vazia.
Sem conteúdo.

----------------------------------------------------------------------------------------------------------------
# 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



5. Re: Shell script usando o wget

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 31/03/2016 - 13:37h

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


6. Re: Shell script usando o wget

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/03/2016 - 13:50h

Mas não é melhor pegar o código de retorno do HTTP (é isso?) para avaliar caso a caso?

----------------------------------------------------------------------------------------------------------------
# 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



7. Re: Shell script usando o wget

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 31/03/2016 - 14:08h

listeiro_037 escreveu:

Mas não é melhor pegar o código de retorno do HTTP (é isso?) para avaliar caso a caso?



Poderia ser também, entretanto o wget em não retorna o código de status do HTTP no status de saída do comando wget....
O código de status do http é impresso na tela, poderia ser feito todo um tratamento com wget e sed para extrair da linha onde ele exibe o código de status do http....o que eu acho que é bem mais trabalhoso....

Veja meu terminal...

patrick@X550LN:~$ wget www.atp.com.br/extranet/servicoBanco/service.asmsx">http://www.atp.com.br/extranet/servicoBanco/service.asmsx
--2016-03-31 14:06:12-- www.atp.com.br/extranet/servicoBanco/service.asmsx">http://www.atp.com.br/extranet/servicoBanco/service.asmsx
Resolving www.atp.com.br (www.atp.com.br)... 177.67.252.10
Connecting to www.atp.com.br (www.atp.com.br)|177.67.252.10|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2016-03-31 14:06:13 ERROR 404: Not Found.

patrick@X550LN:~$ echo $?
8
patrick@X550LN:~$ wget http://www.atp.com.br/extranet/servicoBanco/service.asmx
--2016-03-31 14:06:39-- http://www.atp.com.br/extranet/servicoBanco/service.asmx
Resolving www.atp.com.br (www.atp.com.br)... 177.67.252.10
Connecting to www.atp.com.br (www.atp.com.br)|177.67.252.10|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5843 (5.7K) [text/html]
Saving to: ‘service.asmx.3’

service.asmx.3 100%[=======================================================================================================================>] 5.71K --.-KB/s in 0.09s

2016-03-31 14:06:40 (64.9 KB/s) - ‘service.asmx.3’ saved [5843/5843]

patrick@X550LN:~$ echo $?
0
patrick@X550LN:~$


O código de status de saída do comando wget quando o status do http é 200, é 0 de sucesso :)
Já quando o http tem o status 404 (clássico not found, coloquei uma url errada), o status de saída do wget é 8.
Entretanto acredito que o status de saída do comando wget não tenha relação direta com o status http.


Mas é possível fazer desse jeito que você mencionou também, mas acho mais trabalho.

http://goo.gl/g6NiFp


8. Re: Shell script usando o wget

Paulo
paulo1205

(usa Ubuntu)

Enviado em 31/03/2016 - 14:54h

Tem de ser com wget? Eu acho o curl mais amigável para uso em scripts.

O seguinte comando vai retornar a você apenas o código de retorno do HTTP.

response_code=`curl -s -o /dev/null -w "%{http_code}" "http://www.seu.site/seu_caminho"` 



9. Re: Shell script usando o wget

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/03/2016 - 14:58h

paulo1205 escreveu:

Tem de ser com wget? Eu acho o curl mais amigável para uso em scripts.

O seguinte comando vai retornar a você apenas o código de retorno do HTTP.

response_code=`curl -s -o /dev/null -w "%{http_code}" "http://www.seu.site/seu_caminho"` 


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.

Aprendi mais uma quando eu quiser fazer web scraping com shel script.

----------------------------------------------------------------------------------------------------------------
# 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



10. Re: Shell script usando o wget

Paulo
paulo1205

(usa Ubuntu)

Enviado em 31/03/2016 - 15:18h

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!




11. Shell script usando o wget

Andre
andrecosta62

(usa Outra)

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

Não funcionou! ele deu um erro:

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

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

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)




12. Re: Shell script usando o wget

Andre
andrecosta62

(usa Outra)

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

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



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts