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 ?
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]......
Perfeito!
Obrigado ^_____^
Naum entendi a sua pergunta :-\
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
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 ^^
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 :/
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
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 :/
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
chmod007 Muito bom kra! ;)
tópico teve um final feliz
huahuahuaHUhuAhua