MD5 retornar true ou false [RESOLVIDO]

1. MD5 retornar true ou false [RESOLVIDO]

Cézar Augusto
cizordj

(usa Debian)

Enviado em 22/11/2018 - 11:20h

#!bin/bash

Bom dia pessoal, estou criando um script que faz a instalação de vários aplicativos para mim. Ele é dividido em funções e cada função baixa da internet o pacote tar.xz e o instala na distribuição. A distro que estou usando é Zorin OS (base Ubuntu) com kernel low-latency.
No que empaquei foi o seguinte, após o download ele faz a verificação de integridade do pacote e eu gostaria que ele tivesse uma condicional que se der errado apaga tudo e recomeça o download e se der certo continua com a instalação. Tentei criar uma subfunção pra isso e fazer ela retornar 0 para sucesso e 1 para fracasso e depois usar uma condicional dentro da função grande dizendo o que fazer para cada retorno, mas eu olhei todos os parâmetros do comando md5sum e nenhum retorna número, só retorna uma string
Nome_do_pacote.tar.xz : SUCESSO!
ou
Qualquer mensagem: FALHOU!
A subfunção que tentei:
pacoteX(){
verificacao(){
MD5=`md5sum -c --ignore-missing --status md5sums`
$MD5
return $MD5
}
if [ verificacao == 0 ] ; then
echo "Verificação sucesso"
else
echo "Verificação falhou"
menu
fi
}

Após muitos testes com parâmetros diferentes eu cheguei a uma solução mais criativa :
pacoteX(){
# Baixou o pacoteX.tar.xz e seu md5sums
MD5=`md5sum -c --ignore-missing --strict md5sums`
pacote=`ls pacote*.tar.xz`
$MD5
if [ "$MD5" == "$pacote: SUCESSO" ] ; then
echo "Verificação concluída!"
else
zenity --info --text="Verificação de integridade falhou, voltando ao menu principal"
menu
fi
# Continua com o resto da instalação
}

Eu sei que está meio complicado essa condicional, aliás levei muito tempo para chegar a esse ponto e mesmo assim isso sempre retorna a minha mensagem de erro com o zenity (mesmo a verificação dando certo fora do script). Então eu gostaria de ver o que programadores mais experientes fariam numa situação dessas se ignoram a condicional e simplesmente verifica (sem complicar as coisas) ou larga mão de verificar os arquivos e só instala de uma vez... Também já tentei um monte de variações desse mesmo código e algumas vezes isso retorna um erro do bash -> Excesso de argumentos.
Agradeço desde já quem puder me ajudar.


  


2. MELHOR RESPOSTA

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 22/11/2018 - 15:43h

Cizordj escreveu:

Olha, muito obrigado. O seu código funcionou direitinho no script, esse com certeza será útil por mais vezes que eu precisar esse tipo de coisa. Só tive que tirar um sinal de = fora porque dava um erro
caesar_code.sh: 261: [: 0: unexpected operator  

mesmo assim foi de grande utilidade. Muito obrigado @renato_pacheco
echo "Verificando a integridade dos arquivos"
pacoteX(){
MD5=`md5sum -c --ignore-missing --status md5sums`
return $MD5
}
pacoteX
if [ $? = 0 ] ; then
echo "Verificação sucesso"
else
echo "Verificação falhou"
echo "Retornando ao menu"
contagem_regressiva
menu
fi


Opa! Desculpe! Errei a sintaxe. Deve ficar assim:


...
if [ $? -eq 0 ] ; then
...


Se vc estiver usando apenas um sinal de igual, vc estará atribuindo o valor 0 toda vez q testar, dando sempre True. O certo é do jeito q passei.

--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh

3. Re: MD5 retornar true ou false [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 22/11/2018 - 13:19h

Pegando seu código aqui, vc pode usar o retorno de execução do próprio sistema:
pacoteX(){
MD5=`md5sum -c --ignore-missing --status md5sums`
return $MD5
}
pacoteX
if [ $? == 0 ] ; then
echo "Verificação sucesso"
else
echo "Verificação falhou"
menu
fi


A variável $? sempre vai ver a situação de execução do último comando executado (nesse caso, a sua funcão pacoteX). Se for 0, foi executada com sucesso, se for 1, teve erros.

--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


4. Funcionou

Cézar Augusto
cizordj

(usa Debian)

Enviado em 22/11/2018 - 15:21h

Olha, muito obrigado. O seu código funcionou direitinho no script, esse com certeza será útil por mais vezes que eu precisar esse tipo de coisa. Só tive que tirar um sinal de = fora porque dava um erro
caesar_code.sh: 261: [: 0: unexpected operator  

mesmo assim foi de grande utilidade. Muito obrigado @renato_pacheco
echo "Verificando a integridade dos arquivos"
pacoteX(){
MD5=`md5sum -c --ignore-missing --status md5sums`
return $MD5
}
pacoteX
if [ $? = 0 ] ; then
echo "Verificação sucesso"
else
echo "Verificação falhou"
echo "Retornando ao menu"
contagem_regressiva
menu
fi



5. Re: MD5 retornar true ou false [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/11/2018 - 15:32h

Cizordj escreveu:

#!bin/bash

Bom dia pessoal, estou criando um script que faz a instalação de vários aplicativos para mim. Ele é dividido em funções e cada função baixa da internet o pacote tar.xz e o instala na distribuição. A distro que estou usando é Zorin OS (base Ubuntu) com kernel low-latency.
No que empaquei foi o seguinte,
após o download ele faz a verificação de integridade do pacote e eu gostaria que ele tivesse uma condicional que se der errado apaga tudo e recomeça o download e se der certo continua com a instalação.
Tentei criar uma subfunção pra isso e fazer ela retornar 0 para sucesso e 1 para fracasso e depois usar uma condicional dentro da função grande dizendo o que fazer para cada retorno, mas eu olhei todos os parâmetros do comando md5sum e nenhum retorna número, só retorna uma string
Nome_do_pacote.tar.xz : SUCESSO!
ou
Qualquer mensagem: FALHOU!
A subfunção que tentei:
pacoteX(){
verificacao(){
MD5=`md5sum -c --ignore-missing --status md5sums`
$MD5
return $MD5
}
if [ verificacao == 0 ] ; then
echo "Verificação sucesso"
else
echo "Verificação falhou"
menu
fi
}

Após muitos testes com parâmetros diferentes eu cheguei a uma solução mais criativa :
pacoteX(){
# Baixou o pacoteX.tar.xz e seu md5sums
MD5=`md5sum -c --ignore-missing --strict md5sums`
pacote=`ls pacote*.tar.xz`
$MD5
if [ "$MD5" == "$pacote: SUCESSO" ] ; then
echo "Verificação concluída!"
else
zenity --info --text="Verificação de integridade falhou, voltando ao menu principal"
menu
fi
# Continua com o resto da instalação
}

Eu sei que está meio complicado essa condicional, aliás levei muito tempo para chegar a esse ponto e mesmo assim isso sempre retorna a minha mensagem de erro com o zenity (mesmo a verificação dando certo fora do script). Então eu gostaria de ver o que programadores mais experientes fariam numa situação dessas se ignoram a condicional e simplesmente verifica (sem complicar as coisas) ou larga mão de verificar os arquivos e só instala de uma vez... Também já tentei um monte de variações desse mesmo código e algumas vezes isso retorna um erro do bash -> Excesso de argumentos.
Agradeço desde já quem puder me ajudar.

Boa tarde, segue sugestão:
Partindo do principio, que o ARQUIVO e o md5sum($MD5) do referido ARQUIVO, foram "baixados",
Faça:
if [ ${MD5} = $(md5sum ARQUIVO|cut -d" " -f1) ];then
echo -e "\n SUCESSO\n Continue . . ."
else
echo -e " FALHOU.\n Apague o arquivo e reinicie o Download"
fi
Note que:
$MD5 = É a Saída completa do comando md5sum
Exemplo: MD5="7adaa631d8d445b803e6c1ca845338a0 Nome_do_ARQUIVO"

att.:
Marcelo Oliver


6. Re: MD5 retornar true ou false [RESOLVIDO]

Cézar Augusto
cizordj

(usa Debian)

Enviado em 22/11/2018 - 16:40h

msoliver escreveu:
Boa tarde, segue sugestão:
Partindo do principio, que o ARQUIVO e o md5sum($MD5) do referido ARQUIVO, foram "baixados",
Faça:
if [ ${MD5} = $(md5sum ARQUIVO|cut -d" " -f1) ];then
echo -e "\n SUCESSO\n Continue . . ."
else
echo -e " FALHOU.\n Apague o arquivo e reinicie o Download"
fi
Note que:
$MD5 = É a Saída completa do comando md5sum
Exemplo: MD5="7adaa631d8d445b803e6c1ca845338a0 Nome_do_ARQUIVO"

att.:
Marcelo Oliver

Obrigado Marcelo Oliver, com certeza vou guardar sua sugestão e usar nos meus scripts, talvez como função verificadora que recebe como parâmetros os arquivos. Vamos ver... valeu mesmo👍👍👍



7. Re: MD5 retornar true ou false [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 22/11/2018 - 17:30h

msoliver escreveu:

Boa tarde, segue sugestão:
Partindo do principio, que o ARQUIVO e o md5sum($MD5) do referido ARQUIVO, foram "baixados",
Faça:
if [ ${MD5} = $(md5sum ARQUIVO|cut -d" " -f1) ];then
echo -e "\n SUCESSO\n Continue . . ."
else
echo -e " FALHOU.\n Apague o arquivo e reinicie o Download"
fi
Note que:
$MD5 = É a Saída completa do comando md5sum
Exemplo: MD5="7adaa631d8d445b803e6c1ca845338a0 Nome_do_ARQUIVO"

att.:
Marcelo Oliver


Tem um erro na sua sugestão. A comparação das variáveis deve ficar assim:


...
if [[ ${MD5} == $(md5sum ARQUIVO | cut -d" " -f1) ]];then
...


Foi o mesmo erro q o colega cometeu acima. Dessa forma fica OK.
--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts