Recherche de site Web

Créer des scripts Bash interactifs avec une invite Oui, Non, Annuler


Les scripts shell interactifs peuvent rendre les tâches d'administration système plus efficaces et conviviales. En incorporant des invites Oui, Non et Annuler, vous pouvez vous assurer que les scripts ne s'exécutent qu'avec la confirmation explicite de l'utilisateur, évitant ainsi des actions non désirées. Dans ce guide, nous apprendrons comment créer des scripts Bash interactifs utilisant des invites Oui, Non et Annuler sous Linux.

Introduction

Lorsque vous écrivez des scripts Bash, vous pouvez les rendre plus utiles en demandant à l'utilisateur de fournir des informations. Cela rend le script plus interactif et convivial.

Une façon de le faire est d'utiliser la commande read, qui vous permet de demander à l'utilisateur de saisir des informations et de stocker sa réponse dans une variable.

En combinant la commande read avec des instructions conditionnelles, telles que les instructions if et case, vous pouvez faire en sorte que votre script prenne différentes actions en fonction de la réponse de l'utilisateur.

Dans ce tutoriel, nous couvrirons :

  • Qu'est-ce que la commande read,
  • Comment utiliser la commande read pour capturer l'entrée de l'utilisateur,
  • Utilisation des instructions if et case pour gérer différentes réponses,
  • Et des exemples pratiques pour créer des scripts Bash interactifs.

À la fin de ce guide, vous serez capable d'écrire des scripts Bash interactifs qui peuvent inviter les utilisateurs à continuer, annuler ou interrompre des opérations.

Qu'est-ce que la commande read dans Bash ?

La commande read dans Bash est utilisée pour lire une ligne d'entrée de l'utilisateur ou d'un fichier et l'assigner à une ou plusieurs variables. Cette commande est très utile dans les scripts shell pour obtenir des entrées de l'utilisateur ou traiter des fichiers texte.

Comment fonctionne la commande read

Lorsque vous utilisez read, le script s'arrête et attend que l'utilisateur tape quelque chose et appuie sur Entrée. Tout ce que l'utilisateur tape est enregistré dans une variable que vous pouvez utiliser plus tard dans votre script.

Pourquoi est-ce utile ?

  • Cela rend vos scripts interactifs.
  • Vous pouvez obtenir des informations de l'utilisateur pour personnaliser la façon dont votre script fonctionne.
  • C'est idéal pour créer des menus ou demander une confirmation avant de faire quelque chose d'important.

Exemples d'utilisation

  • Demander le nom d'un utilisateur pour personnaliser les messages.
  • Obtenir une réponse oui/non avant de procéder à une action.
  • Créer un menu simple où les utilisateurs peuvent choisir des options.

Notions de base de la commande read

1. Syntaxe:

read [options] variable_name

Options :

  • -r : Empêche que les barres obliques inverses soient interprétées comme des caractères d'échappement. Exemple : read -r response
  • -p : Vous permet d'afficher un message d'invite sans avoir besoin de echo. Exemple : read -p "Quel est votre nom ? " name
  • -s : Masque ce que l'utilisateur tape (utile pour les mots de passe). Exemple : read -s -p "Entrez votre mot de passe : " password
  • -t : Définit une limite de temps pour l'entrée.
  • -n : Limite le nombre de caractères que l'utilisateur peut saisir.

2. Lecture des entrées utilisateur:

L'utilisation la plus courante de la commande read est de demander à l'utilisateur une saisie pendant l'exécution du script.

Jetez un œil à l'exemple suivant :

echo "Please enter your name:"
read name
echo "Hello, $name!"

Lecture de l'entrée utilisateur

Ici,

  • echo "Veuillez entrer votre nom :" affiche un message d'invite.
  • read name attend que l'utilisateur tape quelque chose et appuie sur Entrée. La saisie est stockée dans la variable name.
  • echo "Hello, $name!" affiche la saisie de l'utilisateur à nouveau.

3. Utilisation d'une invite :

Vous pouvez utiliser l'option -p pour afficher une invite en utilisant la commande echo

read -p "How old are you? " age
echo "I am $age years old."

Utiliser une invite

4. Lecture de plusieurs variables:

Vous pouvez lire plusieurs entrées dans différentes variables sur une seule ligne.

echo "Enter your first name and last name:"
read first_name last_name
echo "Hello, $first_name $last_name!"

Lecture de plusieurs variables

Voici un autre exemple pour lire plusieurs valeurs :

read -p "Enter your favorite color and animal: " color animal
echo "Your favorite color is $color and your favorite animal is $animal."

5. Utilisation d'une valeur par défaut:

Vous pouvez fournir une valeur par défaut si l'utilisateur ne saisit rien.

read -p "Enter your favorite blog [OSTechNix]: " blog
blog=${blog:-OSTechNix}
echo "My favorite blog is $blog."

Utiliser une valeur par défaut

6. Définir une limite de temps pour la saisie :

Vous pouvez définir une limite de temps pour la saisie de l'utilisateur avec le drapeau -t comme ci-dessous :

read -t 5 -p "Quick! Type your lucky number (5 seconds): " lucky_number
echo "Your lucky number is $lucky_number"

Si vous n'entrez pas de saisie dans les 5 secondes, la commande read quittera simplement.

Définir une limite de temps pour la saisie

7. Lire un mot de passe (la saisie est masquée) :

Vous pouvez utiliser l'option -s pour obtenir des informations sensibles comme les mots de passe. Vous ne verrez aucune saisie lorsque vous tapez le mot de passe. Tapez simplement le mot de passe et appuyez sur ENTRÉE.

read -s -p "Enter a password: " password 
echo # This just prints a newline
echo "Password received (but not shown for security)"

Voici un exemple de fragment de la commande read pour inviter l'utilisateur à confirmer s'il doit procéder à une mise à jour du système, abandonner ou annuler l'opération :

prompt_for_input() {
    while true; do
        echo -n "Do you want to update the system? (y/n/c): "
        read -r response
        case "$response" in
            [Yy]* )
                echo "You selected Yes."
                return 0
                ;;
            [Nn]* )
                echo "You selected No."
                return 1
                ;;
            [Cc]* )
                echo "You selected Cancel."
                return 2
                ;;
            * )
                echo "Invalid input. Please enter y, n, or c."
                ;;
        esac
    done
}

Voici ce que le script ci-dessus fait :

  • echo -n "Voulez-vous mettre à jour le système ? (o/n/c) : " affiche une invite sans saut de ligne à la fin.
  • read -r response attend que l'utilisateur tape une réponse (y, n, ou c) et la stocke dans la variable response.
  • L'instruction case traite la réponse, déterminant quelle action entreprendre en fonction de l'entrée de l'utilisateur.

Comme vous pouvez le voir, la commande read rend vos scripts interactifs. Vous pouvez obtenir des informations de l'utilisateur pour personnaliser le fonctionnement de votre script. C'est parfait pour créer des menus ou demander une confirmation avant de faire quelque chose d'important.

Créer des scripts Bash interactifs utilisant les opérations Oui, Non et Annuler

Ici, j'ai donné trois exemples de scripts pour créer des scripts interactifs en utilisant la commande read et des instructions conditionnelles.

Exemple 1 : Un script shell interactif pour mettre à jour un système basé sur Debian

Disons que vous voulez mettre à jour votre serveur Debian Linux. Avant de procéder à la mise à jour, vous voulez inviter l'utilisateur à confirmer s'il souhaite continuer, interrompre ou annuler l'opération.

Voici un exemple de script Bash pour cette tâche :

Explication du script :

1. Inviter l'utilisateur : Le script invite l'utilisateur à confirmer s'il souhaite mettre à jour le paquet logiciel.
2. Capturer l'entrée de l'utilisateur : La commande read capture l'entrée de l'utilisateur.
3. Gérer l'entrée : l'instruction case traite la réponse de l'utilisateur, déterminant s'il a choisi Oui, Non ou Annuler.
4. Mettre à jour le logiciel :

  • Si l'utilisateur sélectionne Oui ([Yy]*), le script poursuit la mise à jour du logiciel en utilisant sudo apt-get update && sudo apt-get upgrade -y.
  • Si l'utilisateur sélectionne Non ([Nn]*), le script affiche un message indiquant que la mise à jour a été annulée.
  • Si l'utilisateur sélectionne Annuler ([Cc]*), le script affiche un message indiquant que la mise à jour a été annulée.
  1. Gestion des entrées non valides : Si l'utilisateur saisit autre chose que y, n ou c, le script lui redemande jusqu'à ce qu'il fournisse une réponse valide.

Pour l'utiliser, copiez simplement le code ci-dessus dans un fichier texte, par exemple debupdate.sh. Rendez-le exécutable :

chmod +x debupdate.sh

Exécutez le script en utilisant la commande :

./debupdate.sh

Exemple de sortie :

Le script ne procédera à la mise à jour du système que si l'utilisateur saisit y.

Do you want to update the software package? (y/n/c): y
You selected Yes.
Proceeding with the software update...
[sudo] password for ostechnix: 
Hit:5 http://deb.debian.org/debian bullseye InRelease                          
Get:6 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]        
Get:7 http://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]      
Hit:9 http://security.debian.org/debian-security bullseye-security InRelease   
Fetched 95.5 kB in 11s (8,768 B/s)                                             
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Software update completed successfully.

Ceci est juste un exemple pour illustrer l'objectif de la commande read. Cela peut être utile pour les utilisateurs qui doivent s'assurer que les mises à jour ne sont appliquées qu'avec une confirmation explicite.

Bien sûr, vous n'avez pas besoin d'écrire un script pour la commande sudo apt-get update && sudo apt-get upgrade. C'est juste une commande en une ligne et vous pouvez la lancer dans votre Terminal sans avoir besoin d'un script.

Exemple 2 : Supprimer les anciens fichiers journaux

Disons que vous êtes un administrateur système et que vous devez écrire un script pour supprimer les anciens fichiers journaux d'un serveur. Vous voulez vous assurer que l'utilisateur est conscient des conséquences de l'exécution du script et lui donner une chance d'annuler l'opération.

Avertissement : NE lancez PAS ce script aveuglément sur votre système. Ce script supprimera les fichiers PLUS ANCIENS que 30 jours de votre répertoire /var/log/. Ceci est uniquement à des fins de démonstration. Vous devez changer l'emplacement du répertoire avant de l'exécuter.

Voici un exemple de script :

Dans cet exemple, le script :

  1. Avertit l'utilisateur des conséquences de l'exécution du script.
  2. Demande à l'utilisateur de confirmer s'il souhaite continuer.
  3. Si l'utilisateur saisit 'y', le script supprime tous les fichiers journaux datant de plus de 30 jours en utilisant la commande find.
  4. Si l'utilisateur saisit 'n', le script annule l'opération et affiche un message.
  5. Si l'utilisateur saisit 'c', le script se termine sans rien faire.
  6. Si l'utilisateur saisit autre chose, le script affiche un message d'erreur et invite à nouveau l'utilisateur.

Ce script fournit un filet de sécurité pour éviter la suppression accidentelle de fichiers journaux importants et donne à l'utilisateur une chance de reconsidérer ses actions.

Ce script n'est pas seulement destiné à supprimer les anciens fichiers journaux. Vous pouvez utiliser ce script pour trouver et supprimer les fichiers datant de plus de X jours de n'importe quel répertoire. Il suffit de modifier ce script et de changer l'emplacement du répertoire des journaux pour un autre.

Exemple 3 : Copier des fichiers d'un répertoire à un autre

Disons que vous écrivez un script pour copier des fichiers d'un répertoire source vers un répertoire de destination. Vous voulez demander à l'utilisateur de confirmer l'opération avant de continuer, surtout si le répertoire de destination contient déjà des fichiers portant les mêmes noms.

Voici un exemple de script :

Mettez à jour les valeurs de SOURCE_DIR et DEST_DIR dans votre script. Assurez-vous également que l'utilisateur dispose des permissions appropriées sur l'emplacement de destination.

Dans cet exemple, le script :

  1. Informe l'utilisateur sur l'opération et ses conséquences potentielles (écrasement des fichiers).
  2. Demande à l'utilisateur de confirmer s'il souhaite continuer.
  3. Si l'utilisateur saisit « y », le script copie tous les fichiers du répertoire source vers le répertoire de destination en utilisant la commande cp.
  4. Si l'utilisateur saisit 'n', le script annule l'opération et affiche un message.
  5. Si l'utilisateur saisit 'c', le script se termine sans rien faire.
  6. Si l'utilisateur saisit autre chose, le script affiche un message d'erreur et invite à nouveau l'utilisateur.

Ce script fournit un filet de sécurité pour éviter l'écrasement accidentel des fichiers et permet à l'utilisateur de reconsidérer ses actions.

Conclusion

Dans ce tutoriel, nous avons appris à créer des scripts Bash interactifs qui posent à l'utilisateur des questions Oui, Non ou Annuler, puis à utiliser sa réponse pour prendre des décisions.

À des fins de démonstration, nous avons utilisé la commande read pour obtenir l'entrée de l'utilisateur, puis nous avons utilisé les instructions if et case pour évaluer la réponse de l'utilisateur et prendre l'action appropriée.

Ce n'est pas la seule façon de créer des scripts shell interactifs sous Linux, mais c'est une méthode efficace. Il existe également d'autres façons, mais je préfère utiliser la commande read pour sa simplicité.

Êtes-vous intéressé par le scripting Bash ? Nous avons publié une série de tutoriels de scripting Bash pour débutants et utilisateurs intermédiaires. Consultez le lien suivant pour apprendre le scripting Bash à votre propre convenance :

  • Introduction à la programmation Bash | Tutoriel de script Bash pour débutants