Erro ao validar versão

1. Erro ao validar versão

Andryos
andryosribeiro

(usa Red Hat)

Enviado em 08/02/2022 - 11:04h

Bom dia, amigos!

Estou com um problema aqui ..

Estou tentando fazer um script shell para validar a versão, mas está dando erro ..

Esse comando trás a versão do mysql ai eu defini ele como uma variável

VER=$($sql -e "select left(version(), 3) from dual;")


if [[ (( $VER == 5.6 )) ]]

then

echo "deu certo"

else

echo "não deu"

fi

A versão é 5.6 mas ele está passando para o "não deu" .. O que estou fazendo de errado será?



  


2. Re:

Rafael Grether
rafael_grether

(usa FreeBSD)

Enviado em 08/02/2022 - 13:13h

Olá,

A maneira mais fácil de descobrir é depurando seu script bash.
O bash script pode ser depurado com bash -x script.sh

Tenho o MariaDB aqui instalado, prefiro sh POSIX, então fiz assim:

#!/usr/bin/env sh

VER=$(mysql -V | cut -d ' ' -f4)

if [ $VER = "15.1" ]
then
echo "Sim, versao eh "$VER
else
echo "Nao, versao eh "$VER
fi



3. Erro ao validar versão

Andryos
andryosribeiro

(usa Red Hat)

Enviado em 08/02/2022 - 17:01h


Mas não é possível fazer dessa maneira que quero?


4. Erro ao validar versão

Andryos
andryosribeiro

(usa Red Hat)

Enviado em 08/02/2022 - 17:02h


rafael_grether escreveu:

Olá,

A maneira mais fácil de descobrir é depurando seu script bash.
O bash script pode ser depurado com bash -x script.sh

Tenho o MariaDB aqui instalado, prefiro sh POSIX, então fiz assim:

#!/usr/bin/env sh

VER=$(mysql -V | cut -d ' ' -f4)

if [ $VER = "15.1" ]

then
echo "Sim, versao eh "$VER
else
echo "Nao, versao eh "$VER
fi


Mas não é possível fazer dessa maneira que quero?



5. Re: Erro ao validar versão

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/02/2022 - 18:15h


andryosribeiro escreveu:

Bom dia, amigos!

Estou com um problema aqui ..

Estou tentando fazer um script shell para validar a versão, mas está dando erro ..

Esse comando trás a versão do mysql ai eu defini ele como uma variável

VER=$($sql -e "select left(version(), 3) from dual;")


if [[ (( $VER == 5.6 )) ]]

then

echo "deu certo"

else

echo "não deu"

fi

A versão é 5.6 mas ele está passando para o "não deu" .. O que estou fazendo de errado será?

Boa noite.
Como está comparando STRING,
use:

ver=5.6
[ "$ver" = "5.6" ] && echo IGUAL || echo DIF

Se quer validar Números:
ver=5.6;
awk '{if($1>$2) print "Maior";else if($1<$2) print "Menor";else print "Igual"}' <<< "$ver 5.6"



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



6. Re:

Rafael Grether
rafael_grether

(usa FreeBSD)

Enviado em 09/02/2022 - 13:00h

andryosribeiro, depende.

Qual é a forma que você quer? Popular uma variavel através de uma consulta SQL? Pode sim, mas não da forma que voce fez.

Eu utilizo o MariaDB, mas acredito que com o mysql seja igual, uma vez que o MariaDB é fork do mysql.
Da forma que voce fez, a variavel $VER vai ser populada com o cabeçalho da consulta.
Voce mesmo pode verificar isso dando um echo $VER

E tem erros na sua instrução.
O ideal seria fazer:

VER=$(mysql -N --execute "select left(version(), 3) from dual;")

O -N vai ignorar cabeçalho. E aquele seu segundo $ não tem muito sentido, retirei tambem.

Outro erro que voce faz é a comparação direta com a versão.
O ideal é comparar como string, como já apontado pelo Marcelo Oliver.



7. Erro ao validar versão

Andryos
andryosribeiro

(usa Red Hat)

Enviado em 09/02/2022 - 16:10h


rafael_grether escreveu:

andryosribeiro, depende.

Qual é a forma que você quer? Popular uma variavel através de uma consulta SQL? Pode sim, mas não da forma que voce fez.

Eu utilizo o MariaDB, mas acredito que com o mysql seja igual, uma vez que o MariaDB é fork do mysql.
Da forma que voce fez, a variavel $VER vai ser populada com o cabeçalho da consulta.
Voce mesmo pode verificar isso dando um echo $VER

E tem erros na sua instrução.
O ideal seria fazer:

VER=$(mysql -N --execute "select left(version(), 3) from dual;")

O -N vai ignorar cabeçalho. E aquele seu segundo $ não tem muito sentido, retirei tambem.

Outro erro que voce faz é a comparação direta com a versão.
O ideal é comparar como string, como já apontado pelo Marcelo Oliver.


Perfeito, mas ainda tem algo errado..

É que assim, eu tenho 4 versões do MySQL instaladas no meu servidor. (5.5/5.6/5.7 e 8.0)
Existem scripts que só executam em determinadas versões ai por isso ele precisa validar a versão do MySQL antes de executar.

export mysql="mysql -u root -p*********"

VER=$(mysql -V | awk '{print $5}')

if [[ (( $VER > 5.7* )) ]];

then

....


Não entendi muito bem como fazer ..



8. Re: Erro ao validar versão

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/02/2022 - 16:39h

andryosribeiro escreveu:


rafael_grether escreveu:

andryosribeiro, depende.

Qual é a forma que você quer? Popular uma variavel através de uma consulta SQL? Pode sim, mas não da forma que voce fez.

Eu utilizo o MariaDB, mas acredito que com o mysql seja igual, uma vez que o MariaDB é fork do mysql.
Da forma que voce fez, a variavel $VER vai ser populada com o cabeçalho da consulta.
Voce mesmo pode verificar isso dando um echo $VER

E tem erros na sua instrução.
O ideal seria fazer:

VER=$(mysql -N --execute "select left(version(), 3) from dual;")

O -N vai ignorar cabeçalho. E aquele seu segundo $ não tem muito sentido, retirei tambem.

Outro erro que voce faz é a comparação direta com a versão.
O ideal é comparar como string, como já apontado pelo Marcelo Oliver.


Perfeito, mas ainda tem algo errado..

É que assim, eu tenho 4 versões do MySQL instaladas no meu servidor. (5.5/5.6/5.7 e 8.0)
Existem scripts que só executam em determinadas versões ai por isso ele precisa validar a versão do MySQL antes de executar.

export mysql="mysql -u root -p*********"

VER=$(mysql -V | awk '{print $5}')

if [[ (( $VER > 5.7* )) ]];

then

....


Não entendi muito bem como fazer ..

Já que sabe as possíveis saídas de "$ver",
use o case:

ver=5.5
case $ver in
> 5.5) echo cinco.cinco;;
> 5.6) echo cinco.seis;;
> 5.7) echo cinco.sete;;
> 8.0) echo oito;;
> esac

-----------------------------------------------------------------------------------------------------------------
Quanto a sintaxe:
[[ (( $VER > 5.7* )) ]];
Sem comentários...
Quer persistir no erro.....
Paciência
----------------------------------------------------------------------------------------------------------------


______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts