Script Bash : exemple d’invite YES/NO
Les scripts Bash interactifs incluent souvent une invite oui ou non afin de demander la vérification de l’utilisateur avant de poursuivre une série d’instructions ou d’annuler la procédure.
Si un utilisateur répond oui à l’invite, le script Bash poursuit généralement sa tâche, et si un utilisateur répond non, le script quitte ou passe à une autre partie du script.
Dans ce tutoriel, vous allez voir comment créer une invite oui/non dans un script Bash sur un système Linux. Consultez certains de nos exemples ci-dessous pour savoir comment fonctionne une invite oui/non.
Dans ce tutoriel, vous allez apprendre :
- Comment créer une invite oui ou non dans Bash
- Comment boucler une invite oui ou non pour des réponses non valides
- Comment vérifier les réponses en minuscules ou en majuscules
Script Bash : exemple d’invite YES/NO
Nous allons lire l’entrée à partir de la ligne de commande en utilisant la commande
readdans notre script Bash. Il est préférable de l’associer à une instruction case qui peut vérifier si l’utilisateur a entréouiounonou autre chose.#!/bin/bash read -p "Do you want to proceed? (yes/no) " yn case $yn in yes ) echo ok, we will proceed;; no ) echo exiting...; exit;; * ) echo invalid response; exit 1;; esac echo doing stuff...Dans ce script, la commande
readdemande à l’utilisateur s’il souhaite continuer et attend l’entrée. La réponse de l’utilisateur est stockée dans la variable$yn. L’instructioncasedétermine ensuite si l’utilisateur a entréoui,nonou autre chose, et procède en conséquence. Voici les résultats lorsque nous exécutons le script :./test.sh Do you want to proceed? (yes/no) yes ok, we will proceed doing stuff... ./test.sh Do you want to proceed? (yes/no) no exiting... ./test.sh Do you want to proceed? (yes/no) fdsfdsf invalid responseUn problème avec le script ci-dessus est que si un utilisateur entre par erreur une réponse invalide, le script ne tente pas d’obtenir une réponse correcte et quitte à la place. Ce n’est pas un problème dans certaines situations, mais il peut arriver que nous souhaitions continuellement demander à l’utilisateur une réponse valide par oui ou par non. Dans ce cas, nous pouvons simplement envelopper notre invite oui/non dans une boucle
while.#!/bin/bash while true; do read -p "Do you want to proceed? (yes/no) " yn case $yn in yes ) echo ok, we will proceed; break;; no ) echo exiting...; exit;; * ) echo invalid response;; esac done echo doing stuff...Notez qu’il était également nécessaire d’ajouter une
pauseà la clauseyesde notre énoncé decas. Cela indique à Bash de quitter la bouclewhileau cas où l’utilisateur répondrait par l’affirmative. Nous avons également supprimé la commandeexitde notre clause de réponse invalide. Voici ce qui se passe lorsque nous entrons des réponses invalides maintenant :./test.sh Do you want to proceed? (yes/no) aaa invalid response Do you want to proceed? (yes/no) bbb invalid response Do you want to proceed? (yes/no) yes ok, we will proceed doing stuff...Plutôt que de forcer nos utilisateurs à taper un
ouiou unnoncomplet, il est beaucoup plus conventionnel d’autoriser une réponsede younsur les systèmes Linux. De plus, assurons-nous que notre réponse n’est pas sensible à la casse, de sorte qu’une lettre majuscule ou minuscule peut être saisie.#!/bin/bash while true; do read -p "Do you want to proceed? (y/n) " yn case $yn in [yY] ) echo ok, we will proceed; break;; [nN] ) echo exiting...; exit;; * ) echo invalid response;; esac done echo doing stuff...Voir le résultat ci-dessous. C’est beaucoup plus pratique pour l’utilisateur puisqu’il n’a pas besoin d’épeler le mot et n’a pas à se soucier de savoir si son verrouillage des majuscules est activé ou non.
./test.sh Do you want to proceed? (y/n) Y ok, we will proceed doing stuff... ./test.sh Do you want to proceed? (y/n) N exiting... ./test.sh Do you want to proceed? (y/n) y ok, we will proceed doing stuff... ./test.sh Do you want to proceed? (y/n) n exiting...
Réflexions finales
Dans ce tutoriel, nous avons vu comment créer une simple invite oui ou non dans un script Bash sur un système Linux. Il existe d’autres façons de le faire, mais la plus courante est une commande de lecture et une instruction case à l’intérieur d’une boucle while. Il est également plus courant de demander une réponse d’une lettre plutôt que de taper un mot entier, bien que vous puissiez facilement adapter votre script pour accepter l’un ou l’autre type de réponse.
