Script Bash – Ajoutez des boîtes de dialogue à vos scripts avec Whiptail

Bash

Script Bash – Ajoutez des boîtes de dialogue à vos scripts avec Whiptail

I. Présentation

Vous codez en Bash et vous trouvez que l’interface texte de vos codes a un style rétro des années 60 ? Avec whiptail, vous allez pouvoir rendre vos scripts un peu plus attrayants en y ajoutant des boites de dialogue !

Whiptail est présent par défaut sur les distributions Debian et sur certaines distributions Red Hat Linux. S’il ne l’est pas, pas de panique, c’est assez simple à installer.

II. Installation de whiptail

Avant d’installer whiptail, nous allons vérifier s’il n’est pas déjà présent. Ouvrez un terminal et tapez la commande :


Dans mon cas, il est bien présent (normal, Kali est une distribution Debian). S’il ne l’est pas, une simple commande vous permettra de l’installer.

Sous Debian, Ubuntu et dérivés :


Sous CentOS, RHEL et Fedora : est intégré au package .


Sous Arch Linux :


Vous êtes prêt à passer à la phase d’utilisation !

III. Utilisation de whiptail

Abordons désormais l’utilisation de whiptail afin d’en profiter dans les scripts Bash. Nous commencerons par évoquer la syntaxe globale, puis nous verrons quelques exemples.

A. Syntaxe

whiptail utilise la syntaxe suivante :


Quelques explications :

  • désigne le type de boite de dialogue, j’aborderai les détails un peu plus bas.
  •  : le message affiché.
  • La est le nombre de lignes.
  • La , le nombre de caractères par ligne.
  • Les sont les suivants :

Pour les détails, vous pouvez consulter la documentation de la commande, en cliquant sur ce lien.

Notez l’option qui, comme son nom l’indique, permet de mettre un titre sur la fenêtre de dialogue.

B. Les boites de dialogue

Dans whiptail, il existe 8 types de boites de dialogue, que nous allons découvrir.

  • Le message d’information

Résultat :

  • Boite de confirmation

Cette boite de dialogue permet d’afficher une proposition à laquelle répondre par “oui” ou par “non“.


Résultat :

Note : le texte des boutons peuvent être modifiés avec les options et .

Cette boite renvoie une valeur () de 0 pour oui et de 1 pour non.

  • Champ de saisie

Ce type de boite de dialogue permet tout simplement à l’utilisateur de saisir du texte.


Mais, c’est quoi au juste ce  ?

Il s’agit en fait de redirections utilisées pour gérer les flux d’entrée et de sortie du terminal lors de l’exécution de la commande . Dans notre cas, voici précisément ce qu’il se passe :

  1. : on duplique la sortie standard (, alias descripteur ) vers un nouveau descripteur de fichier temporaire (). Cela permet de sauvegarder la sortie normale avant de la modifier.
  2. : on redirige la sortie standard () vers la sortie d’erreur standard ().
  3. : on redirige la sortie d’erreur () vers le descripteur temporaire (), qui contient la sortie standard originale.

L’objectif est de récupérer la saisie de l’utilisateur en gérant correctement les entrées et sorties, car affiche normalement les résultats sur (2). Grâce à ces redirections, on s’assure que la valeur entrée est bien récupérée dans la variable appelée .

Résultat :

Que se passe-t-il si je choisis cancel ?

Whiptail n’affichera rien en sortie et renverra un différent de zéro. Ceci peut être géré dans un script en utilisant :


  • Champ de mot de passe

Une boite de dialogue spéciale est disponible pour les mots de passe. Elle permet également à l’utilisateur de saisir du texte, mais celui-ci n’est pas visible à l’écran.


Résultat :

  • La barre de progression

On va ici afficher une barre de progression. La syntaxe est la suivante :


On a ici un bloc d’instructions qui envoie en pipe des informations sur la progression () à gauge. Le zéro après la largeur et la hauteur indique que la progression doit commencer à 0 %.

Cette option présente quelques subtilités :

– La valeur renvoyée à doit être contenue entre et (pour des valeurs plus petites ou plus grandes, il va falloir faire le calcul pour avoir un pourcentage).

– Si vous fixez la valeur de départ à 50 % et que la première valeur envoyée dans le pipe est différente, la barre prendra en compte la valeur envoyée dans le pipe.

C. Les menus

Ici, on va proposer à l’utilisateur une liste de plusieurs choix, ce qui va représenter un menu en Bash.


Vous remarquerez ici plusieurs choses :

– Le après les nombres de lignes et de colonnes. Il indique le nombre de lignes de choix à afficher (s’il y en a plus, vous aurez une barre de défilement).

– Sur chaque ligne de choix, deux chaînes de caractères :

  • La première sera la valeur renvoyée par . Ici ce sont des chiffres, mais vous pouvez aussi entrer des lettres, voir des mots.
  • La seconde chaîne est le texte décrivant le choix.

– Les en fin de ligne. Normalement, tous les arguments, après , doivent se situer sur une même ligne. Pour rendre le code plus lisible, j’ai fait des retours à la ligne ; le permet à whiptail d’échapper (ne pas prendre en compte) ces retours à la ligne.

Résultat :

D. Les listes de choix

  • Les listes à choix multiples

L’idée est la même que la précédente, mais on proposera à l’utilisateur la possibilité de faire plusieurs choix (du coup, la commande renvoie une liste). La syntaxe est la suivante :


Vous noterez la même structure que la précédente avec ici en plus, la possibilité de cocher des cases par défaut (ON) ou non (OFF).

Résultat :

  • Listes à choix unique

Même chose que précédemment, mais avec ici la possibilité de ne choisir qu’une seule option dans la liste proposée.

Mais, c’est pareil que pour les menus me direz-vous ?

Pas tout à fait. La différence est que vous pouvez ici définir un choix par défaut.

La syntaxe est la suivante :


Résultat :

IV. Conclusion

Avec , vous avez un outil simple et puissant pour dynamiser vos scripts shell et, cerise sur le gâteau, il est déjà intégré à de nombreuses distributions Linux. Au besoin, vous pouvez l’installer grâce aux commandes évoquées dans cet article.

Grâce à ses différentes boîtes de dialogue, vous pouvez améliorer l’interactivité et l’esthétique de vos scripts Bash : menus, listes, zones de saisie, etc… Il y a un large choix dans les éléments disponibles.

Couplé à d’autres outils Linux et à la puissance de Bash, il devient encore plus intéressant pour la création de scripts ergonomiques et pratiques. Maintenant que vous disposez de ce guide de prise en main de : à vous de jouer !

SOURCE