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:
----------------------------------------------------------------------------------------
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
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
patrickpcsusa Nenhuma
Post recolhido
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
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...
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
patrickpcsusa Nenhuma
Post recolhido
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....
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.
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
paulo1205usa Ubuntu
Post recolhido
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
andrecosta62usa Outra
Post recolhido
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
andrecosta62usa Outra
Post recolhido
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:
----------------------------------------------------------------------------------------
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