Création — Nicolas THOREZ 2020/03/11 15:37
| Opérateur | Fonction | Explication | Exemple |
|---|---|---|---|
! | négation | Renvoie vrai si le test est faux | [ -n "A" ] echo $? 0 [ ! -n "A" ] echo $? 1 |
-a ou && | et logique | Renvoie vrai si les deux variables sont vrai | [ -n "A" -a -n "B" ] echo $? 0 |
-o ou || | ou logique | Renvoie vrai si l'une des deux variables est vrai | [ -n "A" -o -n "" ] echo $? 0 |
Les tests sur les chaînes sont effectués dans une structure à simple crochet.
A est donc différent de a.| 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 | [ -n "" ] echo $? 1 [ -n "A" ] echo $? 0 |
Les tests sur les nombres 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 |
Les expressions régulières sont testées avec des doubles crochets et l'opérateur arithmétique =~, exemple :
WORD="ABCD" [[ $WORD =~ [A-Z]* ]] echo $? 0 [[ $WORD =~ [0-9]* ]] echo $? 1
Pour plus d'explications sur les expressions régulières : Les expressions régulières (regex)
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 :
., suivie de dossiers et terminée par le nom de l'objet. Le test sera effectué en suivant l'arborescence à partir du dossier courant.| 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 |
| 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 |
| 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 |
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.
if [ "$VAR" == "A" ]
then
echo "VAR est égal à A"
else
echo "VAR est différent de A"
fi
[ "$VAR" == "A" ] && echo "VAR est égal à A" || echo "VAR est différent de A"
Dans la forme courte, && correspond à then et || à else.
On peut aussi ajouter d'autres conditions après une vérification vrai (then) et avant une vérification fausse (else). Ces nouvelles conditions sont introduites par elif selon le format :
if [ "$VAR" == "A" ]
then
echo "VAR est égal à A"
elif [ "$VAR" == "B" ]
then
echo "VAR est égal à B"
elif [ "$VAR" == "C" ]
then
echo "VAR est égal à C"
# ---- Il peut y avoir autant de conditions elif que l'on souhaite ----
else
echo "VAR est différent de A, B, C, etc..."
fi
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.