[Ubuntu-BR] Problema com script shell
hamacker
sirhamacker em gmail.com
Segunda Janeiro 22 20:13:30 UTC 2007
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.
>
More information about the ubuntu-br
mailing list