« Programmation Bash/Tests » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Ajout d'un exemple final, à développer.
Ligne 106 : Ligne 106 :
vrai si e1 ou e2 est vrai. -o ou le '''ou''' logique (''Or'').
vrai si e1 ou e2 est vrai. -o ou le '''ou''' logique (''Or'').


== Un exemple complet ==
<source lang="bash">
#!/bin/bash
read -p "If you are agree enter y or yes" answer
if [ ! $answer = "y" -a ! $answer = "yes" ]; then
echo "No we Can't"
else
echo ":=)"
fi
</source>
[[Catégorie:Programmation Bash (livre)]]
[[Catégorie:Programmation Bash (livre)]]

Version du 23 octobre 2012 à 09:40

Syntaxe du test

Deux syntaxes équivalentes permettent de tester des expressions :

[ expression ]

ou

test expression


Ces deux commandes renvoient un code de retour valant 0 si l'expression est vraie et 1 si l'expression est fausse. Exemple :

$ [ 2 = 2 ]
$ echo $?
0
$ [ 2 = 3 ]
$ echo $?
1

La commande test fonctionne de manière complétement équivalente :

$ test 2 = 2
$ echo $?
0
$ test 2 = 3
$ echo $?
1

Tester une variable

Il est tout à fait possible de tester le contenu d'une variable avec les commandes test ou [ :

[ $a = toto ]

la substitution de la variable par sa valeur est alors effectuée et le test est vrai si la variable contient la valeur toto et faux sinon. Par contre, si la variable a n'est pas définie lors du test, la substitution de la ligne sera :

[  = toto ]

ce qui provoquera une erreur. Il est donc préférable de toujours protéger une variable lors d'un test soit avec des guillemets :

[ "$a" = toto ]

soit avec un préfixe :

[ x$a = xtoto ]

Attention, dans ce cas un caractère espace dans $a pose quand même un problème s'il est substitué. Il faut donc préférer la solution précédente.

Tests sur les objets du système de fichiers

Les opérateurs de tests disponibles sont, pour les les objets du système de fichiers :

  • [ -e $FILE ]
vrai si l'objet désigné par $FILE existe dans le répertoire courant,
  • [ -s $FILE ]
vrai si l'objet désigné par $FILE existe dans le répertoire courant et si sa taille est supérieure à zéro,
  • [ -f $FILE ]
vrai si l'objet désigné par $FILE est un fichier dans le répertoire courant,
  • [ -r $FILE ]
vrai si l'objet désigné par $FILE est un fichier lisible dans le répertoire courant,
  • [ -w $FILE ]
vrai si l'objet désigné par $FILE est un fichier inscriptible dans le répertoire courant,
  • [ -x $FILE ]
vrai si l'objet désigné par $FILE est un fichier exécutable dans le répertoire courant,
  • [ -d $FILE ]
vrai si l'objet désigné par $FILE est un répertoire dans le répertoire courant.

Tests sur les chaînes de caractères

Les opérateurs de tests disponibles sont, pour les chaînes :

  • [ c1 = c2 ]
vrai si c1 et c2 sont égaux,
  • [ c1 != c2 ]
vrai si c1 et c2 sont différents,
  • [ -z c ]
vrai si c est la chaîne vide (Zero),
  • [ -n c ]
vrai si c n'est pas la chaîne vide (Non zero).

Tests sur les nombres

Pour les nombres :

  • [ n1 -eq n2 ]
vrai si n1 et n2 sont égaux (EQual),
  • [ n1 -ne n2 ]
vrai si n1 et n2 sont différents (Not Equal),
  • [ n1 -lt n2 ]
vrai si n1 est strictement inférieur à n2 (Less Than),
  • [ n1 -le n2 ]
vrai si n1 est inférieur ou égal à n2 (Less or Equal),
  • [ n1 -gt n2 ]
vrai si n1 est strictement supérieur à n2 (Greater Than),
  • [ n1 -ge n2 ]
vrai si n1 est supérieur ou égal à n2 (Greater or Equal).

Tests et logique

Ou comment introduire une alternative logique :

  • [ ! e ]
vrai si e est faux. ! est la négation.
  • [ e1 -a e2 ]
vrai si e1 et e2 sont vrais. -a ou le et logique (And).
  • [ e1 -o e2 ]
vrai si e1 ou e2 est vrai. -o ou le ou logique (Or).

Un exemple complet

#!/bin/bash
read -p "If you are agree enter y or yes" answer
if [  ! $answer = "y" -a ! $answer = "yes" ]; then
    echo "No we Can't" 
else
    echo ":=)"
fi