Nous allons voir comment créer un script bash qui permet de demander une saisie particulière à un utilisateur avant d'exécuter du code tout en gérant la casse et les erreurs.

La première chose à faire est de décider des entrées possibles pour l'utilisateur, ici ça sera :

  • o ou O : Oui je veux exécuter le script
  • n ou N : Non je ne veux pas exécuter le script
  • * : Tout le reste, que nous ne prenons pas en compte et qui servira à retourner une réponse invalide

Pour répondre à ce besoin, voici une première version du script :

read -p "Exécuter le script ? (o/n) " on
case $on in
    [oO] ) 
        echo "Exécution des commandes."
        echo "Terminé.";;
    [nN] ) 
        echo "Annulation."
        exit 0;;
    * ) 
        echo "Réponse invalide."
        exit 1;;
esac

Explication de certaines parties du code :

  • read -p : Afficher un message et prendre en compte la saisie de l'utilisateur sur une même ligne
  • case : Choix selon une correspondance trouvée avec $on (la saisie utilisateur)
  • [oO] et [nN] : Prise en compte de la casse (o ou O, n ou N)
  • exit 0 et exit 1 : 0 indique que tout s'est bien passé, 1 indique une erreur ou un échec

Bien que tout fonctionne, il serait intéressant de pouvoir redemander à l'utilisateur de saisir une réponse si celle-ci n'est ni o/O ni n/N plutôt qu'un message d'erreur.

Pour cela, il suffit d'apporter quelques changements en plaçant notamment le code existant dans une boucle comme ceci :

while true; do
    read -p "Exécuter le script ? (o/n) " on
    case $on in
        [oO] ) 
            echo "Exécution des commandes."
            echo "Terminé." 
            break;;
        [nN] ) 
            echo "Annulation."
            exit 0;;
        * ) 
            echo "Erreur, veuillez répondre avec 'o' ou 'n'.";;
    esac
done

En plus de la boucle, un break a été inséré dans le code pour le cas [oO] qui permet de quitter la boucle nouvellement ajoutée et exécuter le potentiel code qui pourrait suivre celle-ci.

Il ne reste plus qu'à adapter le code selon les besoins que l'on peut recontrer.