Monday, 21/05/2018

4.2.2 - Case

La structure de décision case permet de simplifier l'écriture et la compréhension d'une série d'expressions if-then-else. En effet, celles-ci permettent d'exécuter un ensemble de commandes lorsqu'une expression (variable, résultat d'exécution, etc.) correspond à un modèle prédéfini (ce nodèle peut contenir des caractères spéciaux). Le tableau suivant présente les caractères spéciaux les plus utilisés et quelques exemples:

 

Caractère ou expressionProposition équivalente
*Chaîne de 0 à plusieurs caractères
?Un caractère quelconque
[série]Tous les caractères dans la série
[!série]Tous les caractères n'étant pas dans la série
tr*Chaîne de caractères qui débute par tr
*c*Chaîne de caractères ayant un c à l'intérieur
tr?a*Chaîne de caractères débutant par tr suivi d'un caractère quelconque, le caractère a, puis n'importe quoi
[abc]a, b ou c
[.,;]point, virgule, ou point virgule
[-_]tiret ou souligné
[a-f]a, b, c, d, e ou f
[a-z]Toutes les lettres minuscules
[!0-9]Tous les caractères sauf les chiffres de 0 à 9
[0-9!]Tous les chiffres et le point d'exclamation
[a-zA-Z]Toutes les lettres minuscules ou majuscules
[a-zA-Z0-9-]Toutes les lettres minuscules ou majuscules, tous les chiffres et le tiret

De plus, dans l'expression représentant le modèle, le caractère | peut être utilisé pour représenter un OU logique.

Syntaxe générale:
case expression in
    modèle 1 )
        commandes1
        ;;
    modèle2 )
        commandes2
        ;;
.
.
.
esac

 

Exemple:

#!/bin/bash
echo -n "Est-ce que vous m'aimez? "
read reponse
case "$reponse" in
    [YyOo]* )
        echo "Moi aussi, je t'aime :)"
        ;;
    [Nn]* )
        echo "Je suis déçu :("
        ;;
    * )
        echo "Une telle question demande un peu plus de respect!"
        ;;
esac