Recherche de site Web

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

  1. Nous allons lire l’entrée à partir de la ligne de commande en utilisant la commande read dans notre script Bash. Il est préférable de l’associer à une instruction case qui peut vérifier si l’utilisateur a entré oui ou non ou 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 read demande à 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’instruction case détermine ensuite si l’utilisateur a entré oui, non ou 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 response
    
  2. Un 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 clause yes de notre énoncé de cas. Cela indique à Bash de quitter la boucle while au cas où l’utilisateur répondrait par l’affirmative. Nous avons également supprimé la commande exit de 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...
    
  3. Plutôt que de forcer nos utilisateurs à taper un oui ou un non complet, il est beaucoup plus conventionnel d’autoriser une réponse de y ou n sur 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.

Articles connexes: