Flux rss

[Shell] Tester une variable numérique

Bookmark Ajouter aux favoris / Partager
Dernière mise à jour le 3 avril 2007 à 21:27 par jipicy
Publié par jipicy

Tester une variable numérique

   Préambule


Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères".

De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à fait vrai, mais nous verrons ça en fin d'article).

Donc jusqu'à présent il fallait user de petites astuces plus ou moins "alambiquées" pour parvenir à définir si oui ou non une variable était de type "entier".

   Sommaire

   Exemples de tests


En voici trois faisant appel respectivement à la commande "grep", à la commande "expr" et à la commande "test" couplée à certaines instructions de contrôle comme le code retour d'une commande.

Note : Dans les exemples suivants, nous considèrerons que la variable "$var" est initialisée d'après le paramètre "$1" passé directement sur la ligne de commande à la suite de l'appel de chaque script.

Retour sommaire

   grep


Note : Dans l'exemple qui suit, l'expression "[ [:digit:] ]" doit s'écrire sans les espaces entres les double-crochets.

#!/bin/bash
# script_grep.sh

var=$1
if [ "$(echo $var | grep "^[ [:digit:] ]*$")" ]
then
	echo "La chaîne est numérique"
fi


Retour sommaire

   expr


Évaluation du code retour (ici dans la variable "$statut") après un test sur une opération arithmétique à l'aide de la commande "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


Retour sommaire

   test


On évalue à l'aide de la commande "test" (représentée ici par les crochets "[" et "]") si la valeur de la variable "$var" est égale à zéro (0), puis on évalue le code retour ($?) pour ses 2 états de sortie (vrai ou faux, autrement dit 0 ou 1), qui dans un cas comme dans l'autre serait donc de type entier. Dans tout autre cas, code retour supérieur à 1, échec de l'évaluation.

#!/bin/bash
# script_test.sh

var=$1
[ $var -eq 0 ] 2> /dev/null
if [ $? -eq 0 -o $? -eq 1 ]
then
	echo "La chaîne est numérique"
fi


Retour sommaire

  Variable de type "entier"


Comme souligné en tout début d'article, il est tout a fait possible d'initialiser une variable de type "entier" grâce au shell "POSIX".

La création d'une variable de type entier doit au préalable être déclarée à l'aide de la commande "typeset -i" ou "let".

Voici donc un exemple implémentant la commande "let" pour déterminer si une variable est bien de type "entier"

#!/bin/sh
# script_let.sh

var=$1

if let $var 2>/dev/null 
then
	echo "$var numérique"
else
	echo "$var non numérique"
fi
Noter que la ligne "if let $var 2>/dev/null" aurait très bien pu s'écrire sous l'une ou l'autre de ces formes :
if let var 2>/dev/null
ou
if ((var)) 2>/dev/null


Retour sommaire

   Remerciement


Je tiens à remercier lami20j pour son astuce avec la commande "expr" et surtout pour la déclaration de variable de type entier.
Test chaine numerique en java Bonjour Je débute en Java et je voudrais tester que ma zone est bien numerique(evidemment je ne peux pas utiliser isNumeric) Merci pour votre aide www.commentcamarche.net/forum/affich-1247065-test-chaine-numerique-en-java
[VBS] Tester si 2 variables ont valeur = Bonjour, J'ai un petit problème, je voudrais tester avec if si 2 variables ont la même valeur numérique, même quand les valeur sont égales, le script attends 15 secondes... : Code : MaxConnexions = InputBox("-> Veuillez entrez le nombre de connexions... www.commentcamarche.net/forum/affich-12975222-vbs-tester-si-2-variables-ont-valeur
Tester une variable en javascript Bonjour comment test si une variable existe en javascript, l'équivalent en php est isset() et empty() merci. www.commentcamarche.net/forum/affich-1164246-tester-une-variable-en-javascript
[ADSL] Tester la vitesse de connexion internet (test de débit)Les vitesses de téléchargement (théoriques) : Connexions Pourquoi cette différence ? J'ai un ADSL xxxx, mais quand je télécharge ça va moins vite que ce que ça devrait, pourquoi ? L'upload est trop lent ! Liens Tests de débit... www.commentcamarche.net/faq/sujet-528-adsl-tester-la-vitesse-de-connexion-internet-test-de-debit
Comment récupérer le résultat d'une commande dans une variableComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir... www.commentcamarche.net/faq/sujet-5030-comment-recuperer-le-resultat-d-une-commande-dans-une-variable
[Connexion] Test d'éligibilite de votre ligne à l'ADSLLe lien suivant permet dei tester les offres ADSL possibles sur votre ligne suivant les différents fournisseurs d'accès (FAI) http://www.degrouptest.com/ www.commentcamarche.net/faq/sujet-1076-connexion-test-d-eligibilite-de-votre-ligne-a-l-adsl
Javascript: tester un champ s il est numériquBonjour comment tester en javascript que la valeur entrée dans une champ est bien du numérique et non du texte? Je sais que c un truc du genre: if(formulaire.nom.value == "" mais ce n ets valable ca que pr tester les champs vides Mericci d avance!! www.commentcamarche.net/forum/affich-332953-javascript-tester-un-champ-s-il-est-numeriqu
[PHP] variable non numérique -> numériqueBonjour, j'ai un problee avec une liste déroulante dans un formulaire, avant cette liste me retournait une variable numérique, tout marché parfaitement. cela ressemblait a 01 www.commentcamarche.net/forum/affich-3232869-php-variable-non-numerique-numerique
Tester si une chaine est numériqueComment on peut tester si une chaine de caractères est représente une valeur numérique? La méthode Integer.ParseInt(String) retourne une exception si String contient autres caractères que les chiffres. www.commentcamarche.net/forum/affich-712227-tester-si-une-chaine-est-numerique
24 millions de pixels dans un appareil reflex numérique(Paris - Relax news) - Dans l'interminable course aux pixels que se livrent les fabricants d'appareils photo numériques, Sony frappe un grand coup en annonçant l'arrivée d'un nouveau reflex doté d'un large capteur CMOS (35 x 24 mm) offrant 24,6... www.commentcamarche.net/actualites/24-millions-de-pixels-dans-un-appareil-reflex-numerique-5847321-actualite.php3
[Brève] Deux nouveaux caméscopes numériques Full HD pour Panasonic(Paris - Relaxnews) - Avec les caméscopes numériques HDC-SD5 (999,95 dollars) et HDC-SX5 (899,95 dollars), Panasonic étoffe sa gamme Full HD. Ces derniers sont capables d'enregistrer des images vidéo en 1920 x 1080. Le SX5 utilise aussi bien les... www.commentcamarche.net/actualites/breve-deux-nouveaux-camescopes-numeriques-full-hd-pour-panasonic-3330254-actualite.php3
CGI - Les variables d'environnementNotion de variable d'environnement Les variables d'environnement sont des données stockées dans des variables du système et permettent aux programmes d'avoir des informations sur son environnement. Dans le cas du programme CGI, l'environnement est... www.commentcamarche.net/contents/cgi/cgienv.php3
Les variables avec PerlConcept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois... www.commentcamarche.net/contents/perl/perlvar.php3
Javascript - Les variablesLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,... www.commentcamarche.net/contents/javascript/jsvar.php3