# Programmation Bash/Tests

* Introduction
* Hello World
* Notions essentielles du shell bash
* Interactions avec le système de fichiers
* Flux et redirections
* Tests
* Calculs
* Structures conditionnelles
* Boucles
* Interactions avec l'utilisateur
* Regex
* Fonctions
* Scripts
* Enchaînements et scripts
* Liste des commandes
* Commandes ksh
* Problèmes connus
* Introduction
* Hello World
* Notions essentielles du shell bash
* Interactions avec le système de fichiers
* Flux et redirections
* Tests
* Calculs
* Structures conditionnelles
* Boucles
* Interactions avec l'utilisateur
* Regex
* Fonctions
* Scripts
* Enchaînements et scripts
* Liste des commandes
* Commandes ksh
* Problèmes connus
[ Modifier le sommaire ]

## Conditions

Deux syntaxes équivalentes permettent de tester des expressions : [ expression ] et test expression. Elles renvoient toutes les deux un code de retour valant 0 si l'expression est vraie et 1 si l'expression est fausse. Attention en shell (bin bash) on ne met pas de if avec des = , on utilise les valeurs eq, lt etc...)
La commande test fonctionne de manière complétement équivalente :
Les opérateurs de tests disponibles sont, pour les chaînes :
* c1 = c2, vrai si c1 et c2 sont égales ;
* c1 != c2, vrai si c1 et c2 sont différentes ;
* -z c, vrai si c est une chaîne vide ;
* -n c, vrai si c n'est pas une chaîne vide.
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 (non equal);
* n1 -lt n2, vrai si n1 est strictement inférieur à n2 (lower than);
* n1 -le n2, vrai si n1 est inférieur ou égal à n2 (lower 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).
Pour les expressions :
* ! e, vrai si e est fausse ;
* e1 -a e2, vrai si e1 et e2 sont vraies ;
* e1 -o e2, vrai si e1 ou e2 est vraie.

## Test if

L'instruction if permet d'effectuer des opérations si une condition est réalisée.
L'instruction if peut aussi inclure une instruction else permettant d'exécuter des instructions dans le cas ou la condition n'est pas réalisée.
Il est bien sur possible d'imbriquer des if dans d'autres if et notamment des constructions telles que celle ci sont assez courantes :
Pour permettre d'alléger ce type de code, ksh fournit un raccourci d'écriture : elif. Le code précédent pourrait être réécrit ainsi :

## Test case

L'instruction case permet de comparer une valeur avec une liste d'autres valeurs et d'exécuter un bloc d'instructions lorsque une des valeurs de la liste correspond.
Ce code est équivalent à :

## Syntaxe du test

Deux syntaxes équivalentes permettent de réaliser des tests sur des opérandes:
ou
Ces deux commandes renvoient un code de retour valant 0 si l'expression est vraie et 1 si l'expression est fausse. Exemple :
La commande test fonctionne de manière complètement équivalente :
mais certains lancements peuvent être fait sous certaine condition système:

### Tester une variable

Il est tout à fait possible de tester le contenu d'une variable avec les commandes test ou [ :
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 :
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 :
soit avec un préfixe :
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 objets du système de fichiers :
* [ -e $FILE ]
* [ -s $FILE ]
* [ -f $FILE ]
* [ -r $FILE ]
* [ -w $FILE ]
* [ -x $FILE ]
* [ -d $FILE ]
* [ -L $FILE ]
* [ -N $FILE ]

## 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 égales,
* [ c1 != c2 ] vrai si c1 et c2 sont différentes,
* [ -z c ] vrai si c est une chaîne vide (Zero),
* [ -n c ] vrai si c n'est pas une chaîne vide (Non zero).

## Tests sur les nombres (entiers)

Pour les nombres :
* [ n1 -eq n2 ]
* [ n1 -ne n2 ]
* [ n1 -lt n2 ]
* [ n1 -le n2 ]
* [ n1 -gt n2 ]
* [ n1 -ge n2 ]

## Tests et logique

Ou comment introduire une alternative logique :
* [ ! e ]
* [ e1 -a e2 ]
* [ e1 -o e2 ]

## Un exemple complet

L'exemple montre la manière dont on utilise des négations avec un et logique. En particulier, il ne faut pas utiliser de parenthèses. Le non (le point d'exclamation) s'applique à la proposition logique qui vient ensuite (seulement "$reponse" = "o"). À noter que read -p permet de poser une question et de stocker la réponse de l'utilisateur dans une variable.