Ce tutoriel vous présente l'utilisation des instructions if Bash avec plusieurs conditions pour améliorer vos compétences en script shell. Vous apprendrez à combiner efficacement les opérateurs logiques, vous permettant de créer des scripts qui prennent des décisions intelligentes en fonction de différents critères. À la fin de ce labo (LabEx), vous serez en mesure de créer des outils d'automatisation polyvalents pour les tâches quotidiennes.
Skills Graph
%%%%{init: {'theme':'neutral'}}%%%%
flowchart RL
shell(("Shell")) -.-> shell/ControlFlowGroup(["Control Flow"])
shell(("Shell")) -.-> shell/AdvancedScriptingConceptsGroup(["Advanced Scripting Concepts"])
shell(("Shell")) -.-> shell/SystemInteractionandConfigurationGroup(["System Interaction and Configuration"])
shell/ControlFlowGroup -.-> shell/if_else("If-Else Statements")
shell/ControlFlowGroup -.-> shell/cond_expr("Conditional Expressions")
shell/AdvancedScriptingConceptsGroup -.-> shell/read_input("Reading Input")
shell/SystemInteractionandConfigurationGroup -.-> shell/exit_status_checks("Exit Status Checks")
subgraph Lab Skills
shell/if_else -.-> lab-413763{{"Comment utiliser les instructions if de Bash avec des conditions multiples"}}
shell/cond_expr -.-> lab-413763{{"Comment utiliser les instructions if de Bash avec des conditions multiples"}}
shell/read_input -.-> lab-413763{{"Comment utiliser les instructions if de Bash avec des conditions multiples"}}
shell/exit_status_checks -.-> lab-413763{{"Comment utiliser les instructions if de Bash avec des conditions multiples"}}
end
Comprendre les bases des instructions if Bash
Commençons par les bases. En Bash, l'instruction if permet à votre script de décider quoi faire en fonction du fait qu'une condition soit vraie ou fausse. Cela est particulièrement utile lorsque vous avez besoin d'automatiser des tâches sur votre système Ubuntu.
Ouvrez votre terminal dans le répertoire par défaut, /home/labex/project. Vous écrirez tous vos scripts ici. Pour commencer, créez un fichier de script simple nommé basic_if.sh en tapant :
touch basic_if.sh
Ajoutez le code suivant pour vérifier si un fichier existe :
#!/bin/bash
if [[ -f "testfile.txt" ]]; then
echo "The file exists."
else
echo "The file does not exist."
fi
Ce script utilise [[ -f "testfile.txt" ]] pour tester si testfile.txt existe dans votre répertoire actuel. La commande echo affichera un message en fonction du résultat.
Pour exécuter le script, rendez - le exécutable :
chmod +x basic_if.sh
Puis exécutez - le :
./basic_if.sh
Étant donné que testfile.txt n'existe pas encore, vous verrez "The file does not exist." Créons le fichier pour voir l'autre résultat :
touch testfile.txt
Exécutez le script à nouveau :
./basic_if.sh
Maintenant, il devrait afficher "The file exists." Cette étape vous introduit à la structure de base : if, then, else et fi. Les doubles crochets [[ ]] sont une fonctionnalité moderne de Bash, rendant les tests de condition plus fiables que les crochets simples.
Ajouter plusieurs conditions avec ET (&&)
Maintenant, rendons votre instruction if plus intelligente en vérifiant plusieurs conditions à la fois. Vous utiliserez l'opérateur && (ET), qui exige que toutes les conditions soient vraies pour que le bloc then s'exécute.
Ouvrez à nouveau basic_if.sh et remplacez son contenu par ce script mis à jour :
#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]]; then
echo "The file exists and is readable."
else
echo "The file is either missing or not readable."
fi
Ce script vérifie deux choses : si testfile.txt existe (-f) et s'il est lisible (-r). Les deux conditions doivent être vraies pour que le premier message apparaisse.
Exécutez le script :
./basic_if.sh
Étant donné que vous avez créé testfile.txt à l'Étape 1 et qu'il est lisible par défaut (car labex en est le propriétaire), vous verrez "The file exists and is readable." Pour comprendre comment && fonctionne, testons le scénario inverse. Changez les permissions du fichier pour le rendre illisible :
chmod u-r testfile.txt
Exécutez le script à nouveau :
./basic_if.sh
Maintenant, il affiche "The file is either missing or not readable" car la deuxième condition (-r) échoue. Restaurez la lisibilité pour les étapes suivantes :
chmod u+r testfile.txt
L'opérateur && garantit que chaque condition doit être validée - parfait pour les situations où plusieurs critères sont importants.
Utilisation de OU (||) pour des conditions flexibles
Ensuite, vous allez explorer l'opérateur || (OU), qui permet au bloc then de s'exécuter si au moins une condition est vraie. Cela est utile lorsque vous souhaitez avoir de la flexibilité dans vos vérifications.
Ouvrez à nouveau basic_if.sh. Mettez - le à jour avec ce code :
#!/bin/bash
if [[ -f "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
echo "At least one file exists."
else
echo "Neither file exists."
fi
Ce script vérifie si testfile.txt ou backup.txt existe. Étant donné que testfile.txt est déjà dans votre répertoire, exécutez - le :
./basic_if.sh
Vous verrez "At least one file exists." Maintenant, supprimez testfile.txt pour tester la logique || :
rm testfile.txt
Exécutez le script à nouveau :
./basic_if.sh
Il affiche "Neither file exists" car aucun des deux fichiers n'est présent. Créez backup.txt pour que la condition OU soit vérifiée :
touch backup.txt
./basic_if.sh
Maintenant, il affiche à nouveau "At least one file exists". L'opérateur || est idéal lorsque qu'une seule condition vraie suffit.
Combinaison des opérateurs ET et OU
Combinons les opérateurs && et || pour une logique plus complexe. Vous vérifierez si un fichier existe et répond à des critères spécifiques, avec une condition de secours.
Ouvrez à nouveau basic_if.sh. Mettez - le à jour avec ce code :
#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
echo "Either testfile.txt is readable or backup.txt exists."
else
echo "No suitable file found."
fi
Ce script vérifie si testfile.txt existe et est lisible, ou si backup.txt existe. Recréez testfile.txt :
touch testfile.txt
Exécutez le script :
./basic_if.sh
Il affiche "Either testfile.txt is readable or backup.txt exists" car testfile.txt répond aux deux conditions. Supprimez testfile.txt et conservez backup.txt :
rm testfile.txt
./basic_if.sh
Le même message apparaît car backup.txt satisfait la condition ||. Supprimez également backup.txt :
rm backup.txt
./basic_if.sh
Maintenant, il affiche "No suitable file found." Cette étape montre comment mélanger les opérateurs pour prendre des décisions nuancées.
Application des conditions à une tâche pratique
Enfin, utilisons ce que vous avez appris dans un scénario du monde réel : la validation de l'entrée utilisateur. Vous allez écrire un script pour vérifier si un nombre se trouve dans une plage donnée.
Créez un nouveau script appelé number_check.sh :
touch number_check.sh
chmod +x number_check.sh
Ajoutez ce code :
#!/bin/bash
read -p "Enter a number between 1 and 10: " number
if [[ "$number" -ge 1 ]] && [[ "$number" -le 10 ]]; then
echo "Valid number: $number"
else
echo "Invalid number. Please enter a value between 1 and 10."
fi
Ce script vous invite à entrer un nombre, puis utilise && pour vous assurer qu'il se trouve entre 1 et 10 (inclus). Exécutez - le :
./number_check.sh
Tapez 5 puis appuyez sur Entrée. Vous verrez "Valid number: 5". Exécutez - le à nouveau et entrez 15. Il répond avec "Invalid number. Please enter a value between 1 and 10." C'est une façon pratique de gérer l'entrée utilisateur, en vous assurant que votre script ne continue que avec des données valides.
Résumé
Dans ce laboratoire (LabEx), vous avez maîtrisé les instructions if en Bash avec des conditions multiples en utilisant les opérateurs && et ||. De la vérification des propriétés des fichiers à la validation de l'entrée utilisateur, vous avez créé des scripts qui prennent des décisions en fonction de critères complexes. Ces compétences vous permettent de créer des outils d'automatisation fiables adaptés à divers besoins sur votre système Ubuntu.