[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