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 où la condition n'est pas réalisée.
if condition
then
instruction(s)
else
instruction(s)
fi
Il est bien sûr 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.