[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Como testar se o parâmetro passado só tem dígitos?
From: |
Felipe Kellermann |
Subject: |
Re: [shell-script] Como testar se o parâmetro passado só tem dígitos? |
Date: |
Fri, 8 Aug 2003 21:55:37 -0300 (BRT) |
On Fri, 8 Aug 2003 6:17pm -0300, Valtoir wrote:
> Pensei em fazer o seguinte:
>
> #!/bin/bash
> [ `echo $1 | tr -d '[:digit:]' | wc -w` -ne 0 ] && { echo "Valor não
> numérico"; exit; }
> echo "Valor numérico"
>
> Alguém tem uma dica melhor?
Função (vantagem: retorna caracteres inválidos)
f() { r=${1//[[:digit:]]/}; return ${#r}; }
Ou mais simples:
f() { [ ! "${1//[[:digit:]]/}" ]; }
Outra função apenas para testar, chama f:
g() { f "$1" && echo numérico || echo não numérico; }
$ g a12
não numérico
$ g 312
numérico
A substituição / e // não é padrão (implementação da bash). Uma
função que faz a mesma coisa e deve funcionar em qualquer shell:
f() { [ "$1" = "${1#*[^1234567890]}" ]; }
$ g a12
não numérico
$ g 312
numérico
--
Felipe Kellermann