Shell - Tester une variable numérique
introduction
Dans un "shell", les variables sont du type "chaîne" (par défaut). Cela implique-t-il que vous ne pouvez pas déclarer une variable du type "entier"?
Eh bien, ce n'est pas tout à fait vrai!
Exemples de test
Voici trois tests qui utilisent les commandes suivantes, associées à des instructions de contrôle, telles que le code de retour d’une commande.
- grep
- expr
- tester"
Remarque: Dans les exemples ci-dessous, nous supposerons que la variable $ var est initialisée conformément au paramètre "$ 1", transmis directement dans la ligne de commande à la suite de l'appel de chaque script.
Utiliser grep
Remarque: Dans l'exemple suivant, l'expression "[[: digit:]]" doit être écrite sans espaces entre doubles crochets.
#! / bin / bash # script_grep.sh var = $ 1 si ["$ (echo $ var | grep" ^ [[: digit:]] * $ ")"] puis echo "la chaîne ins numeric" fi
Utiliser expr
Basé sur le code de 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 = $? si test $ statut -lt 2 alors echo "$ var" numeric fi
Utiliser Test
Basé sur l'utilisation de la commande "test" (représentée ici "[" et "]"). Vérifiez si la valeur de la variable $ va est zéro (0), puis évalue le code de retour ($?) Pour ses deux états de sortie (vrai ou faux, c'est-à-dire 0 ou 1). Si le code de retour est supérieur à 1, l'évaluation a échoué.
#! / bin / bash # script_test.sh var = $ 1 [$ var -eq 0] 2> / dev / null si [$? -qq 0 -o $? -eq 1] alors echo "La chaîne est numérique" fi
Variable de type entier
Vous pouvez également initialiser une variable de type "entier" via le shell "POSIX".
Pour créer une variable de type entier, déclarez-la d'abord avec la commande "typeset -i" ou "let".
Voici un exemple qui implémente l'utilisation de la commande "let":
#! / bin / sh # script_let.sh var = $ 1 si let $ var 2> / dev / null alors echo "$ var numeric" sinon echo "$ var non numérique" fi
Notez que la ligne " if let $ var 2> / dev / null " peut aussi s'écrire:
si let 2> / dev / null
ou
if ((var)) 2> / dev / null