Unix / Linux -prise de décision dans le script Shell

Bonjour, futurs programmeurs ! Aujourd'hui, nous allons plonger dans le monde passionnant de la prise de décision dans les scripts Shell Unix et Linux. En tant que votre enseignant de informatique bienveillant du quartier, je suis là pour vous guider dans ce voyage, étape par étape. Alors, prenez votre boisson favorite, installez-vous confortablement, et partons ensemble dans cette aventure !

Unix / Linux - Decision Making

Les instructions if...else

Imaginez que vous êtes à un carrefour dans votre code et que vous devez prendre une décision en fonction de certaines conditions. C'est là que les instructions if...else deviennent utiles. Elles sont comme les feux de circulation de la programmation, guidant votre code vers différents chemins en fonction de la vérité ou de la fausseté des conditions.

Instruction if de base

Commençons par la forme la plus simple de l'instruction if :

if [ condition ]
then
command1
command2
...
commandN
fi

Voici un exemple du monde réel :

#!/bin/bash
age=18

if [ $age -ge 18 ]
then
echo "You are old enough to vote!"
fi

Dans cet exemple, nous vérifions si la variable age est supérieure ou égale à 18. Si c'est le cas, le message "You are old enough to vote!" sera affiché.

Instruction if...else

Maintenant, que faire si nous voulons faire quelque chose lorsque la condition est fausse ? C'est là que la clause else entre en jeu :

if [ condition ]
then
command1
command2
...
commandN
else
alternative_command1
alternative_command2
...
alternative_commandN
fi

Modifions notre exemple de vote :

#!/bin/bash
age=16

if [ $age -ge 18 ]
then
echo "You are old enough to vote!"
else
echo "Sorry, you're too young to vote."
fi

Maintenant, si l'âge est inférieur à 18, il affichera le message "Sorry, you're too young to vote."

Instruction if...elif...else

Parfois, la vie (et le code) ne se résume pas à des situations binaires. Nous avons souvent besoin de vérifier plusieurs conditions. C'est là que la clause elif (else if) entre en jeu :

if [ condition1 ]
then
command1
elif [ condition2 ]
then
command2
else
alternative_command
fi

Créons un exemple plus complexe :

#!/bin/bash
grade=75

if [ $grade -ge 90 ]
then
echo "A - Excellent!"
elif [ $grade -ge 80 ]
then
echo "B - Good job!"
elif [ $grade -ge 70 ]
then
echo "C - You passed."
else
echo "F - You need to study more."
fi

Ce script évalue la note d'un étudiant et fournit des retours appropriés en fonction de différentes plages de notes.

L'instruction case...esac

Maintenant, imaginez que vous êtes à un buffet avec plusieurs options alimentaires. C'est ce que l'instruction case...esac est dans la programmation. Elle vous permet de matcher une valeur contre une liste de motifs et d'exécuter des commandes en fonction de la correspondance.

La syntaxe de base est la suivante :

case expression in
pattern1)
command1
command2
...
commandN
;;
pattern2)
command1
command2
...
commandN
;;
*)
default_command
;;
esac

Voici un exemple pratique :

#!/bin/bash
fruit="apple"

case $fruit in
"apple")
echo "It's a delicious red fruit!"
;;
"banana")
echo "It's a yellow curved fruit!"
;;
"orange")
echo "It's a juicy citrus fruit!"
;;
*)
echo "I don't know that fruit."
;;
esac

Dans cet exemple, nous matchons la valeur de fruit contre différents motifs. Si elle correspond à "apple", elle affichera le message correspondant. Si elle ne correspond à aucun des motifs spécifiés, elle exécutera la commande par défaut (*).

Motifs multiples

Vous pouvez également matcher plusieurs motifs pour le même ensemble de commandes :

#!/bin/bash
day=$(date +%A)

case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "It's a weekday. Time to work!"
;;
Saturday|Sunday)
echo "It's the weekend. Time to relax!"
;;
*)
echo "What planet are you on?"
;;
esac

Ce script vérifie le jour de la semaine actuel et indique s'il s'agit d'un jour de travail ou de week-end.

Comparaison des instructions if...else et case...esac

Maintenant, comparons ces deux structures de prise de décision :

Fonctionnalité if...else case...esac
Complexité Peut gérer des conditions complexes Meilleur pour des correspondances de valeurs simples
Lisibilité Peut devenir difficile à lire avec de nombreuses conditions Plus lisible avec de nombreuses conditions
Performance Légèrement plus lent pour de nombreuses conditions Plus rapide pour de nombreuses conditions
Flexibilité Peut utiliser n'importe quel type de condition Limité à la correspondance de motifs

Au fil des ans, j'ai constaté que les étudiants peinent souvent à choisir entre if...else et case...esac. Voici un simple principe de base : si vous vérifiez une seule variable contre plusieurs valeurs possibles, case...esac est votre ami. Pour tout le reste, tenez-vous en à if...else.

souvenez-vous, la programmation est comme la cuisine. Ces structures de prise de décision sont vos ingrédients, et avec de la pratique, vous apprendrez quand utiliser chacun pour créer le script parfait !

En conclusion, la prise de décision est un aspect crucial de la scripting Shell. Elle permet à vos scripts de s'adapter et de répondre à différentes situations, les rendant plus puissants et flexibles. Que vous utilisiez if...else ou case...esac, vous êtes maintenant équipé des outils pour rendre vos scripts plus intelligents. Continuez à pratiquer, et bientôt vous écrirez des scripts qui peuvent prendre des décisions plus rapidement que vous ne pouvez dire "sudo" !

Credits: Image by storyset