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