[Ubuntu-BR] Problema com script shell
hamacker
sirhamacker em gmail.com
Terça Janeiro 23 11:19:49 UTC 2007
PEguei o seu script e fiz a inversão ficando assim :
#!/bin/bash
#
# Testa qual o tipo de um caracter recebido por parametro
#
##### Teste da Quantidade de Parametros #####
erro=0
if [ "$#" -ne 1 ]
then
echo "Erro -> Uso: testchar caracter"
erro=1
fi
##### Testa se o 1o. parametro tem o tamanho de um caracter #####
case $1 in
?) ;;
*) echo "Erro -> Parametro passado tem mais de um caracter"
erro=2
;;
esac
##### Se houve erro o programa termina, passando o codigo do erro #####
if [ "$erro" -ne 0 ]
then
exit $erro
fi
case $1 in
[A-Z]) echo Letra Maiuscula
;;
[a-z]) echo Letra Minuscula
;;
[0-9]) echo Numero
;;
*) echo Caracter Especial
;;
esac
exit 0
Depois fiz o teste e veja :
laptop:/tmp$ ./testchar.sh A
Letra Maiuscula
laptop:/tmp$ ./testchar.sh a
Letra Minuscula
Em outras palavras, funcionou. Mesmo sem o lower ou upper. Faz o
acrescimo na 1a linha do #!/bin/bash, porque talvez seu interpretador
seja outro (dash, ash,...). Isso apenas para entender o problema
porque particularmente upper/lower é mais simples.
[]'s e sucesso.
Em 22/01/07, Nilo Martins<jniloms em gmail.com> escreveu:
> Obrigado pela ajuda.
>
> o [:lower:] e o [:upper:] funcionaram perfeitamente.
>
> Porém aqui na minha máquina continua dando erro mesmo quando coloco o A-Z na
> frente do a-z, desta vez o z minúsculo fica mostrando mensagem que é
> maiúsculo. !?!? e o detalhe quando abro o texto no gedit ele coloca o "z" de
> uma cor diferente como se fosse o atributo de algum comando. !!?!? fica [a-z]
> ??!!
>
> 2007/1/22, hamacker <sirhamacker em gmail.com>:
> >
> > Onk Donk.
> >
> > É terrivel encontrar exemplos que não funcionam, não é mesmo ?
> > Chega a ser frustante, eu sei como é isso e não vou negar ajuda.
> >
> > É o seguinte a-z e A-Z tem algumas precedencias, por exemplo A-Z
> > sempre estará no grupo entre a-z, mas não o inverso, assim se voce
> > modificar a precedencia como :
> > case "$1" in
> > ["A-Z"]) echo Letra Maiuscula
> > ;;
> > ["a-z"]) echo Letra Minuscula
> > ;;
> > [0-9]) echo Numero
> > ;;
> > *) echo Caracter Especial
> > ;;
> > esac
> >
> > funcionará. Isso tem a ver precedencias não muito documentadas. Mas a
> > verdade é que no bash voce tem lower e upper justamente para esse
> > proposito. Quem sou eu para julgar o trabalho do Julho, mas o exemplo
> > ficaria melhor assim :
> > case "$1" in
> > [[:lower:]] ) echo "Letra Minuscula";;
> > [[:upper:]] ) echo "Letra Maiuscula";;
> > [0-9] ) echo "Digito Numerico";;
> > * ) echo "Caracter Especial";;
> > esac
> >
> > Use sempre aspas nos echos e ";;" é porque voce terminou uma sentença
> > do case. Se cada opção do seu case..in tivesse mais de duas linhas, a
> > ultima linha é que deveria ter um ";;". Isso é apenas para explicar
> > melhor.
> >
> > []'s e sucesso no seu aprendizado.
> >
> > 2007/1/22, Nilo Martins <jniloms em gmail.com>:
> > > Estou iniciando meus estudo de shell script e comprei o livro
> > Programação
> > > Shell Linux (de Julio Cezar Neves) para facilitar esta tarefa.
> > >
> > > Neste livro tem um exemplo que está dando erro aqui no meu Ubuntu.
> > >
> > > O código é o seguinte: (testchar.sh)
> > >
> > > #
> > > # Testa qual o tipo de um caracter recebido por parametro
> > > #
> > >
> > > ##### Teste da Quantidade de Parametros #####
> > > erro=0
> > > if [ "$#" -ne 1 ]
> > > then
> > > echo "Erro -> Uso: testchar caracter"
> > > erro=1
> > > fi
> > >
> > > ##### Testa se o 1o. parametro tem o tamanho de um caracter #####
> > > case $1 in
> > > ?) ;;
> > > *) echo "Erro -> Parametro passado tem mais de um caracter"
> > > erro=2
> > > ;;
> > > esac
> > >
> > > ##### Se houve erro o programa termina, passando o codigo do
> > erro #####
> > > if [ "$erro" -ne 0 ]
> > > then
> > > exit $erro
> > > fi
> > >
> > > case $1 in
> > > [a-z]) echo Letra Minuscula
> > > ;;
> > > [A-Z]) echo Letra Maiuscula
> > > ;;
> > > [0-9]) echo Numero
> > > ;;
> > > *) echo Caracter Especial
> > > ;;
> > > esac
> > > exit 0
> > >
> > > O problema é que quando executo:
> > > $ ./testchar.sh A
> > > Letra Minuscula
> > > ------------------- > Como vocês viram deveria aparecer a mensagem Letra
> > > Maiúscula e não Minúscula.
> > >
> > > Um detalhe interessante quando abro o arquivo para editar no gedit ele
> > marca
> > > o "z" minúsculo do case com uma cor diferente.
> > >
> >
> > --
> > ubuntu-br mailing list
> > ubuntu-br em lists.ubuntu.com
> > www.ubuntubrasil.org
> > https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
> >
> --
> ubuntu-br mailing list
> ubuntu-br em lists.ubuntu.com
> www.ubuntubrasil.org
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
>
More information about the ubuntu-br
mailing list