Ajuda - Script Hora [Resolvido]

Iniciado por chmod007, 15 de Outubro , 2009, 06:33:46 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

chmod007

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 ?
#!barrabinbarrabash ; )

Imoogi


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]......

chmod007

#!barrabinbarrabash ; )

PROFX5016


chmod007

Citação de: Imoogi online 15 de Outubro , 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
#!barrabinbarrabash ; )

keenlanas

Citação de: chmod007 online 16 de Outubro , 2009, 12:21:53 AM
Citação de: Imoogi online 15 de Outubro , 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 ^^

chmod007

Citação de: keenlanas online 16 de Outubro , 2009, 10:31:51 AM
Citação de: chmod007 online 16 de Outubro , 2009, 12:21:53 AM
Citação de: Imoogi online 15 de Outubro , 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 :/
#!barrabinbarrabash ; )

keenlanas

Citação de: chmod007 online 16 de Outubro , 2009, 01:21:12 PM
Citação de: keenlanas online 16 de Outubro , 2009, 10:31:51 AM
Citação de: chmod007 online 16 de Outubro , 2009, 12:21:53 AM
Citação de: Imoogi online 15 de Outubro , 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

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

chmod007

Citação de: keenlanas online 16 de Outubro , 2009, 04:39:17 PM
Citação de: chmod007 online 16 de Outubro , 2009, 01:21:12 PM
Citação de: keenlanas online 16 de Outubro , 2009, 10:31:51 AM
Citação de: chmod007 online 16 de Outubro , 2009, 12:21:53 AM
Citação de: Imoogi online 15 de Outubro , 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

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 :/
#!barrabinbarrabash ; )

chmod007

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
#!barrabinbarrabash ; )

Reeves

chmod007 Muito bom kra!   ;)

tópico teve um final feliz
huahuahuaHUhuAhua
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^