Ceci est une ancienne révision du document !
~~CLOSETOC~~
Opérateurs logiques, Conditions
Opérateurs logiques
Pour tous
| Opérateur | Fonction | Explication | Exemple |
|---|---|---|---|
! | négation | Renvoie vrai si le test est faux | [ -z "A" ] echo $? 0 [ ! -z "A" ] echo $? 1 |
-a | et logique | Renvoie vrai si les deux variables sont vrai | |
-o | ou logique | Renvoie vrai si l'une des deux variables est vrai |
Pour les chaînes de caractères
Les tests sur les chaînes sont effectués dans une structure à simple crochet.
<note important>Linux observe une strict sensibilité à la casse. A est donc différent de a.</note>
| Opérateur | Fonction | Explication | Exemple |
|---|---|---|---|
== | égal à | Renvoie vrai si les deux chaînes sont strictement identiques | [ "A" == "A" ] echo $? 0 [ "A" == "a" ] echo $? 1 |
!= | différents de | Renvoie vrai si les deux chaînes sont différentes | [ "A" == "A" ] echo $? 1 [ "A" == "a" ] echo $? 0 |
-z | vide | Renvoie vrai si la chaîne est vide | [ -z "" ] echo $? 0 [ -z "A" ] echo $? 1 |
-n | non vide | Renvoie vrai si la chaîne n'est pas vide | [ -z "" ] echo $? 1 [ -z "A" ] echo $? 0 |
Pour les nombres
Les tests sur les chaînes sont effectués dans une structure à double crochets.
| Opérateur | Fonction | Explication | Exemple |
|---|---|---|---|
-eq | égal à | Renvoie vrai si les deux nombres sont strictement égaux | [[ 1 -eq 1 ]] echo $? 0 [[ 1 -eq 0 ]] echo $? 1 |
-ne | différent de | Renvoie vrai si les deux nombres sont strictement différentes | [[ 1 -eq 1 ]] echo $? 1 [[ 1 -eq 0 ]] echo $? 0 |
-gt | supérieur à | Renvoie vrai si le premier nombre est strictement supérieur au second | [[ 1 -gt 0 ]] echo $? 0 [[ 0 -gt 1 ]] echo $? 1 |
-ge | supérieur ou égal à | Renvoie vrai si le premier nombre est supérieur ou égal au second | [[ 0 -ge 0 ]] echo $? 0 [[ 0 -ge 1 ]] echo $? 1 |
-lt | inférieur à | Renvoie vrai si le premier nombre est strictement inférieur au second | [[ 1 -lt 0 ]] echo $? 1 [[ 0 -lt 1 ]] echo $? 0 |
-le | inférieur ou égal à | Renvoie vrai si le premier nombre est inférieur ou égal au second | [[ 0 -le 0 ]] echo $? 0 [[ 1 -le 0 ]] echo $? 1 |
Pour les fichiers et dossiers
Les fichiers et dossiers (dénommés dans les exemples par FILE) peuvent être désignés directement ou au travers d'une variable. Leurs écritures peuvent être sous trois formes différentes :
- simple : il s'agit simplement du nom de l'objet. Le test sera effectué dans le répertoire courant.
- relative : il s'agit d'un fragment d'arborescence. La chaîne commence par 1 ou 2
., suivie de dossiers et terminée par le nom de l'objet. Le test sera effectué en suivant l'arborescence à partir du dossier courant. - absolue : il s'agit du chemin de l'objet depuis la racine du système. Le test est effectué sur ce chemin complet.
| Opérateur | Fonction | Explication | Exemple |
|---|---|---|---|
-e | existe | Renvoie vrai si l'objet existe | [ -e /etc/issue ] echo $? 0 [ -e /etc/issuuue ] echo $? 1 |
-s | existe et non vide | Renvoie vrai si l'objet existe et que sa taille n'est pas nulle | touch test [ -s ./test ] echo $? 1 echo "hello" > test [ -s ./test ] echo $? 0 |
-N | modifié | Renvoie vrai si l'objet existe et qu'il a été modifié depuis sa dernière lecture | [ -N test ] echo $? 1 echo "hello" > test [ -N test ] echo $? 0 |
-h | lien existant | Renvoie vrai si l'objet existe et qu'il a est un lien symbolique | ln -s /etc/issue /home/user/ [ -h /home/user/issue ] echo $? 0 [ -h /etc/issue ] echo $? 1 |
Pour les fichiers uniquement
| Opérateur | Fonction | Explication | Exemple |
|---|---|---|---|
-f | fichier | Renvoie vrai si l'objet existe et qu'il s'agit d'un fichier | [ -f /etc/issue ] echo $? 0 [ -f /etc ] echo $? 1 |
-r | lisible | Renvoie vrai si l'objet existe, qu'il s'agit d'un fichier et qu'il est lisible | [ -r test ] echo $? 0 chmod -r test [ -r test ] echo $? 1 |
-w | modifiable | Renvoie vrai si l'objet existe, qu'il s'agit d'un fichier et qu'on peut le modifier | [ -w test ] echo $? 0 chmod -w test [ -w test ] echo $? 1 |
-x | exécutable | Renvoie vrai si l'objet existe, qu'il s'agit d'un fichier et qu'on peut l'exécuter | [ -x test ] echo $? 0 chmod -x test [ -x test ] echo $? 1 |
Pour les dossiers uniquement
| Opérateur | Fonction | Explication | Exemple |
|---|---|---|---|
-d | dossier | Renvoie vrai si l'objet existe et qu'il s'agit d'un dossier | [ -d /etc/issue ] echo $? 1 [ -d /etc ] echo $? 0 |
Conditions & Tests
if, then, else, fi
if permet un test simple. On teste une condition et on applique un traitement si il est vrai. Il est aussi possible d'y applique un autre traitement si le test est faux. Les tests peuvent s'écrire sous deux formes différents : longue et courte.
Forme longue
if [ "$VAR" == "A" ]
then
echo "VAR est égal à A"
else
echo "VAR est différent de A"
fi
Forme courte
[ "$VAR" == "A" ] && echo "VAR est égal à A" || echo "VAR est différent de A"
Dans la forme courte, && correspond à then et || à else.
case, esac
case permet d'appliquer un traitement selon la valeur testée.
AGE=1
case $AGE in
1)
echo "Age = 1"
;;
2)
echo "Age = 2"
;;
3|4)
echo "Age = 3 ou 4"
;;
*)
echo "Age incertain"
;;
esac
Chaque valeur de comparaison est indiqué avant un ). Si plusieurs valeurs correspondent au même bloc d'instruction, elles doivent être sur la même ligne, séparées par | et le tout suivit de ). Chaque bloc d'instruction doit toujours être terminée par ;;. En dernière valeur, on peut donner *) qui symbolise le traitement par défaut.
— Nicolas THOREZ 2020/03/11 15:37
Discussion