Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Une version plus moderne du test

Les versions récentes de bash inclure une commande composée qui agit comme un remplacement amélioré pour tester. Il utilise la syntaxe suivante :

[[ expression ]]

où, comme tester, expression est une expression qui donne un résultat vrai ou faux. Les [[]] la commande est très similaire à tester (il supporte toutes ses expressions), mais


ajoute une nouvelle expression de chaîne importante :

string1 =~ regex

qui retourne vrai si string1 correspond à l'expression régulière étendue regex. Cela ouvre de nombreuses possibilités pour effectuer des tâches telles que la validation des données. Dans notre exemple précédent des expressions entières, le script échouerait si la constante INT contenait tout sauf un entier. Le script a besoin d'un moyen de vérifier que la constante contient un entier. À l'aide de [[]] les =~ opérateur d'expression de chaîne, nous pourrions améliorer le script de cette façon :



#! / Bin / bash


# test-integer2 : évalue la valeur d'un entier.


INT=-5


if [[ "$INT" =~ ^-?[0-9]+$ ]]; alors

if [ $INT -eq 0 ]; puis echo "INT est zéro."

d'autre

if [ $INT -lt 0 ]; puis echo "INT est négatif."

d'autre

echo "INT est positif."

fi

if [ $((INT % 2)) -eq 0 ]; puis echo "INT est pair."

d'autre

echo "INT est impair."

fi

fi

d'autre

echo "INT n'est pas un entier." >&2 sortie 1

fi

#! / Bin / bash


# test-integer2 : évalue la valeur d'un entier.


INT=-5


if [[ "$INT" =~ ^-?[0-9]+$ ]]; alors

if [ $INT -eq 0 ]; puis echo "INT est zéro."

d'autre

if [ $INT -lt 0 ]; puis echo "INT est négatif."

d'autre

echo "INT est positif."

fi

if [ $((INT % 2)) -eq 0 ]; puis echo "INT est pair."

d'autre

echo "INT est impair."

fi

fi

d'autre

echo "INT n'est pas un entier." >&2 sortie 1

fi


En appliquant l'expression régulière, nous sommes en mesure de limiter la valeur de INT aux seules chaînes commençant par un signe moins facultatif, suivi d'un ou plusieurs chiffres. Cette expression élimine également la possibilité de valeurs vides.

Une autre fonctionnalité ajoutée de [[]] est que le == L'opérateur prend en charge la correspondance de modèle de la même manière que l'expansion du nom de chemin. Par exemple:



[moi@linuxbox ~]$ FICHIER=foo.bar

[moi@linuxbox ~]$ FICHIER=foo.bar

Une version plus moderne du test


[moi@linuxbox ~]$ if [[ $FILE == foo.* ]]; alors

> echo "$FILE correspond au motif 'foo.*'"

> fi

foo.bar correspond au modèle 'foo.*'

[moi@linuxbox ~]$ if [[ $FILE == foo.* ]]; alors

> echo "$FILE correspond au motif 'foo.*'"

> fi

foo.bar correspond au modèle 'foo.*'


Cela rend [[]] utile pour évaluer les noms de fichiers et de chemins.


Meilleur système d'exploitation Cloud Computing chez OnWorks :