Shell - Testar uma variável numérica

Novembro 2016

Preâmbulo


Em um ambiente "shell", as variáveis são, por padrão, do tipo "cadeia de caracteres".

Assim, não é possível declarar uma variável do tipo "inteira" (enfim, isto não completamente verdadeiro, nós veremos isto no final deste artigo ).

Então até agora era preciso usar pequenos truques mais ou menos "arranjadas " para definir se sim ou não uma variável era do tipo "inteira".

Sumário


Exemplos de testes


Veja aqui três que chamem respectivamente ao comando "grep", ao comando "expr" e ao comando "test" acoplados à certas instruções de controle como o código de retorno de um comando.

Nota : Nos seguintes exemplos, nós consideramos que a variável "$var" é inicializada a partir do parâmetro "$1" passado diretamente na linha de comando depois de uma chamada de cada script.

grep


Nota : No exemplo que segue, a expressão "[ [:digit:] ]" deve se escrever sem os espaços entre as duplas chaves.
#!/bin/bash   
# script_grep.sh   

var=$1   
if [ "$(echo $var | grep "^[ [:digit:] ]*$")" ]   
then   
 echo "A cadeia numérica"   
fi   

expr


Avaliação do código retorno (aqui na variável "$statut") depois de um tete sobre uma operação aritmética com a ajuda do comando "expr".
#!/bin/sh    
# script_expr.sh   

var=$1   
expr $var + 0 1>/dev/null 2>&1   
statut=$?    
if test $statut -lt 2    
then    
 echo "$var" numérique    
fi   

teste


Avalia-se com a ajuda do comando « Test » (representada aqui pelas chaves "[" e "]") se o valor da variável "$var" é igual à zeros (0), depois avalia-se o código retorno ($?) para seus 2 estados de saída (verdadeiro ou falso, dizendo de outra forma 0 ou 1), que como nos dois casos seria então do tipo inteira. Em outro caso, código retorno superior à 1, insucesso de avaliação.
#!/bin/bash   
# script_test.sh   

var=$1   
[ $var -eq 0 ] 2> /dev/null   
if [ $? -eq 0 -o $? -eq 1 ]   
then   
 echo "A cadeia é numérica"   
fi   

Variável do tipo "inteira"


Como salientado no início do artigo, é possível inicializar uma variável do tipo "inteira" graças à Shell "POSIX".

A criação de uma variável de tipo inteira deve previamente ser declarada com a ajuda do comando « typeset -i » ou ou "let".

Eis pois um exemplo que implementa o comando "let" para determinar se uma variável é bem do tipo "inteira"
#!/bin/sh   
# script_let.sh   

var=$1   

if let $var 2>/dev/null    
then   
 echo "$var numérico"   
else   
 echo "$var não numérico"   
fi   
Note que a linha "if let $var 2>/dev/null" poderia muito bem ser escrita em ou ou outra destas formas:
if let var 2>/dev/null
ou
if ((var)) 2>/dev/null

Agradecimentos


Gostaria de agradecer lami20j pela dica com o comando "expr" e sobretudo pela declaração de variável de tipo inteira.

Artigo <a href='http://www.commentcamarche.net/faq/4605-shell-tester-une-variable-numerique
'>original</a> publicado por jipicy

Tradução feita por Ana Spadari

Veja também :
Este documento, intitulado « Shell - Testar uma variável numérica  »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.