paulo1205
(usa Ubuntu)
Enviado em 02/12/2012 - 23:02h
Particularmente, acho que opções sem o traço devem ser evitadas ao máximo, justamente para ficar claro que são opções.
Gosto à parte, tenho as seguintes sugestões sobre seu código.
1) Troque aquele
size=`echo ${#1}` simplesmente pot
size=${#1}.
2) Se você estiver usando
bash ou
ksh para interpretar o script, use
[[ ... ]] em lugar de
[ ... ] para fazer seus testes condicionais, pois a primeira forma é um comando interno do shell, enquanto a segunda é um comando externo (que, para ser executado, implica criar um processo novo, chamar o programa externo e esperar esse comando acabar para verificar se o valor de saída dele é verdadeiro ou falso).
3) A comparação entre de
$size e
0 pode ser numérica, em lugar de string, podendo, portanto, usar o operador
-ne, em lugar de
!=,
Note, porém, que, no fim das contas, seu código provavelmente não está funcionando.
Para ver, faça o "chinês": se suas opções forem dadas pela string "natup", na primeira iteração
size valerá 5 e
current valerá 4. Com isso, o argumento do
case será ${1:4:5} (cujo sentido é: uma substring de $1, começando após o quarto caráter e se estendendo pelos próximos 5 caracteres), que vale 'p'. Na segunda iteração,
size valerá 4 e
current, 3, de modo que ${1:3:4} será 'up'. Depois, ${1:2:3} será 'tup', ${1:1:2} será 'at', e ${1:0:1} será 'n'.
O último argumento da construção de substring (i.e.: o
tamanho na avalição de
${variavel:posicao:tamanho}) certamente deve ser sempre igual a 1 (e, como é fixo, não precisa ficar guardado em nenhuma variável, mas aplicado diretamente), já que você quer testar caráter a caráter. E você deve variar o valor de
current de 0 até
$((size-1)).