Programmation Bash/Structures conditionnelles
if
Test simple
L'instruction if
permet d'effectuer des opérations si une condition est réalisée.
if condition
then
instruction(s)
fi
Dans ce cas condition
est une commande et l'expression conditionelle est exécutée si son code de retour vaut zéro. Par exemple
if pkg-config gtk+-2.0
then
echo "gtk+ est installé sur votre système"
fi
exécute le programme pkg-config
avec le paramètre gtk+-2.0
et exécute echo "gtk+ est installé sur votre système"
si la valeur de retour de pkg-config
est zéro. Il est bien sur possible d'utiliser des enchainements de commandes, ainsi :
if pkg-config gtk+-2.0 && pkg-config gtkglext-1.0
then
echo "gtk+ et gtkglext sont installés sur votre système"
fi
n'affichera quelque chose que si les deux appels à pkg-config
ont un code de retour à 0.
Comme vu précédemment, test
et [
renvoient un code égal à zéro si une condition est vraie et différent de zéro sinon, il est donc possible de les utiliser avec une instrution if
:
if [ "$mavariable" = "unevaleur" ]
then
echo "ma variable a la bonne valeur"
fi
Test avancé
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.
if condition
then
instruction(s)
else
instruction(s)
fi
Il est bien sur possible d'imbriquer des if
dans d'autres if
et notamment des constructions telles que celle ci sont assez courantes :
if condition1
then
instruction(s)
else
if condition2
then
instruction(s)
else
if condition3
...
fi
fi
fi
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 :
if condition1
then
instruction(s)
elif condition2
then
instruction(s)
elif condition3
...
fi
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.
case valeur_testee in
valeur1) instruction(s);;
valeur2) instruction(s);;
valeur3) instruction(s);;
...
esac
Ce code est plus lisible que son équivalent avec if
:
if [ valeur_teste = valeur1 ]
then instruction(s)
elif [ valeur_testee = valeur2 ]
then instruction(s)
elif [ valeur_testee = valeur3 ]
then instruction(s)
...
fi
Les valeurs peuvent contenir des caractères joker, ainsi :
case $a in
t?t?) echo "ok";;
*) exit 1;;
esac
affichera ok
si la variable a
a une valeur correspondant au motif t?t?
, comme par exemple toto
ou tata
.