FORUM DARKERS

Tecnologia & Informática => Programação => Shell Script => Topic started by: chmod007 on 15 de October , 2009, 06:33:46 PM

Title: Ajuda - Script Hora [Resolvido]
Post by: chmod007 on 15 de October , 2009, 06:33:46 PM
Andei aprendendo um pouco sobre shell script nos ultimos tempos, vi um exemplo no livro Programação Shell Linux que não consigo rodar nem a pau aqui. O dito cujo:

Hora=13:23
if [[ $Hora =~ '([01][0-9] | 2[0-3]):[0-5][0-9]' ]]
then
  echo Horario OK
else
  echo O horario informado esta incorreto
fi


Ele aceita a variável, mas de acordo com o livro era pra dar a primeira mensagem, mas só está dando a segunda
alguém consegue dar uma luz ?
Title: Re: Ajuda - Script Hora
Post by: Imoogi on 15 de October , 2009, 07:55:36 PM

Hora=13:23

if [[ $Hora=~'([01][0-9] | 2[0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


tira os espaço entre $Hora=~'([01]......
Title: Re: Ajuda - Script Hora
Post by: chmod007 on 15 de October , 2009, 10:32:10 PM
Perfeito!
Obrigado ^_____^
Title: Re: Ajuda - Script Hora [Resolvido]
Post by: PROFX5016 on 15 de October , 2009, 11:13:22 PM
Naum entendi a sua pergunta  :-\
Title: Re: Ajuda - Script Hora
Post by: chmod007 on 16 de October , 2009, 12:21:53 AM
Quote from: Imoogi on 15 de October , 2009, 07:55:36 PM

Hora=13:23

if [[ $Hora=~'([01][0-9] | 2[0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


tira os espaço entre $Hora=~'([01]......

A principio pareceu dar certo, mas aconteceu o contrário
ele aceita qualquer coisa como horario e dá como Horario OK
por exemplo atribuindo valores como 50, 34:45, etc
Title: Re: Ajuda - Script Hora
Post by: keenlanas on 16 de October , 2009, 10:31:51 AM
Quote from: chmod007 on 16 de October , 2009, 12:21:53 AM
Quote from: Imoogi on 15 de October , 2009, 07:55:36 PM

Hora=13:23

if [[ $Hora=~'([01][0-9] | 2[0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


tira os espaço entre $Hora=~'([01]......

A principio pareceu dar certo, mas aconteceu o contrário
ele aceita qualquer coisa como horario e dá como Horario OK
por exemplo atribuindo valores como 50, 34:45, etc


Não seria:


if [[ $Hora=~'([0-1][0-9] | [2][0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


Não?

Programo poco em shell script, mas vê ae se funciona ^^
Title: Re: Ajuda - Script Hora
Post by: chmod007 on 16 de October , 2009, 01:21:12 PM
Quote from: keenlanas on 16 de October , 2009, 10:31:51 AM
Quote from: chmod007 on 16 de October , 2009, 12:21:53 AM
Quote from: Imoogi on 15 de October , 2009, 07:55:36 PM

Hora=13:23

if [[ $Hora=~'([01][0-9] | 2[0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


tira os espaço entre $Hora=~'([01]......

A principio pareceu dar certo, mas aconteceu o contrário
ele aceita qualquer coisa como horario e dá como Horario OK
por exemplo atribuindo valores como 50, 34:45, etc


Não seria:


if [[ $Hora=~'([0-1][0-9] | [2][0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


Não?

Programo poco em shell script, mas vê ae se funciona ^^

Dei um testada aqui, mas tá apresentando o mesmo erro de atribuir variareis que não são horas... até atribuindo variaveis como "abcd" ele tá aceitando e dando como Horario OK :/
Title: Re: Ajuda - Script Hora
Post by: keenlanas on 16 de October , 2009, 04:39:17 PM
Quote from: chmod007 on 16 de October , 2009, 01:21:12 PM
Quote from: keenlanas on 16 de October , 2009, 10:31:51 AM
Quote from: chmod007 on 16 de October , 2009, 12:21:53 AM
Quote from: Imoogi on 15 de October , 2009, 07:55:36 PM

Hora=13:23

if [[ $Hora=~'([01][0-9] | 2[0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


tira os espaço entre $Hora=~'([01]......

A principio pareceu dar certo, mas aconteceu o contrário
ele aceita qualquer coisa como horario e dá como Horario OK
por exemplo atribuindo valores como 50, 34:45, etc


Não seria:


if [[ $Hora=~'([0-1][0-9] | [2][0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


Não?

Programo poco em shell script, mas vê ae se funciona ^^

Dei um testada aqui, mas tá apresentando o mesmo erro de atribuir variareis que não são horas... até atribuindo variaveis como "abcd" ele tá aceitando e dando como Horario OK :/


Hum, tenta assim então:


if [[ $Hora=~'([0-1][0-9] | [2][0-3]):[0-5][0-9]' ]];
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


O ";" antes do "then" é a unica diferença que eu vi nos códigos que eu procurei...

Veja esse, por exemplo http://www.linuxjournal.com/node/1006996 (http://www.linuxjournal.com/node/1006996)

Tenta... Se não der certo, eu vou logar no linux aqui e testar pra ver o que pode ser :P
Title: Re: Ajuda - Script Hora
Post by: chmod007 on 17 de October , 2009, 12:48:13 AM
Quote from: keenlanas on 16 de October , 2009, 04:39:17 PM
Quote from: chmod007 on 16 de October , 2009, 01:21:12 PM
Quote from: keenlanas on 16 de October , 2009, 10:31:51 AM
Quote from: chmod007 on 16 de October , 2009, 12:21:53 AM
Quote from: Imoogi on 15 de October , 2009, 07:55:36 PM

Hora=13:23

if [[ $Hora=~'([01][0-9] | 2[0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


tira os espaço entre $Hora=~'([01]......

A principio pareceu dar certo, mas aconteceu o contrário
ele aceita qualquer coisa como horario e dá como Horario OK
por exemplo atribuindo valores como 50, 34:45, etc


Não seria:


if [[ $Hora=~'([0-1][0-9] | [2][0-3]):[0-5][0-9]' ]]
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


Não?

Programo poco em shell script, mas vê ae se funciona ^^

Dei um testada aqui, mas tá apresentando o mesmo erro de atribuir variareis que não são horas... até atribuindo variaveis como "abcd" ele tá aceitando e dando como Horario OK :/


Hum, tenta assim então:


if [[ $Hora=~'([0-1][0-9] | [2][0-3]):[0-5][0-9]' ]];
then
   echo Horario OK
else
   echo O horario informado esta incorreto
fi


O ";" antes do "then" é a unica diferença que eu vi nos códigos que eu procurei...

Veja esse, por exemplo http://www.linuxjournal.com/node/1006996 (http://www.linuxjournal.com/node/1006996)

Tenta... Se não der certo, eu vou logar no linux aqui e testar pra ver o que pode ser :P

Então cara... taquei o codigo no script
mudei as variaveis, etc... mas mesmo assim não funfou :/
Title: Re: Ajuda - Script Hora [Resolvido]
Post by: chmod007 on 20 de October , 2009, 01:12:20 PM
Depois de um tempo resolvi procurar o autor do livro pra responder essa questão, eis a resposta:

"claro que vc teve problemas em executar este teste. O que se passou foi o seguinte: na época que escrevi a 7a. Edição do livro (versão 2.17 do bash, se não me engano), no uso do buintin de teste [[...]] precisávamos proteger da interpretação, todos os caracteres significativos para o Shell, como os parênteses do exemplo. A partir do bash 3.0 isso foi abolido e por isso houve essa falha.

Assim sendo, o "quase certo" seria vc fazer: [[ $Hora =~ ([01][0-9]|2[0-3]):[0-5][0-9] ]]

Porém experimente executar este cmd com Hora=12345612:3456 e verá que a msg será de Horário OK, pq a expressão regular está casando com 12:34. Pra ficar totalmente certo, o correto seria fazermos:

[[ $Hora =~ ^([01][0-9]|2[0-3]):[0-5][0-9]$ ]]

Onde o ^ e o $, estipulam o limite inicial e final respectivamente."

Agora o script ficou redondinho (:
espero que seja util pra alguém

aTé mais
Title: Re: Ajuda - Script Hora [Resolvido]
Post by: Reeves on 21 de October , 2009, 10:56:02 AM
chmod007 Muito bom kra!   ;)

tópico teve um final feliz
huahuahuaHUhuAhua