05/12/2025

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 :

whiptail -v

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 :

sudo apt install whiptail -y

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

sudo dnf install newt -y # Fedora, CentOS 8, RHEL 8+
sudo yum install newt -y # CentOS 7 et RHEL 7

Sous Arch Linux :

sudo pacman -S libnewt

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 :

whiptail --option "Message" hauteur largeur [paramètres supplémentaires]

Quelques explications :

  • Option désigne le type de boite de dialogue, j’aborderai les détails un peu plus bas.
  • Message : le message affiché.
  • La hauteur est le nombre de lignes.
  • La largeur, le nombre de caractères par ligne.
  • Les paramètres supplémentaires sont les suivants :
whiptail [ --title title ] [ --backtitle backtitle ] [ --clear ] [ --default-item string ] [ --defaultno ] [ --fb ] [ --nocancel ] [ --yes-button text ] [ --no-button text ] [ --ok-button text ] [ --cancel-button text ] [ --noitem [ ] --output-fd fd ] [ --sepa- rate-output ] [ --scrolltext ] [ --topleft ] box-options 

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

Notez l’option –title <titre> 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
whiptail --msgbox "Ceci est un message" 10 50 –title "titre de la boite"

Résultat :

  • Boite de confirmation

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

whiptail --yesno "Voulez-vous continuer ?" 10 50

Résultat :

Note : le texte des boutons peuvent être modifiés avec les options –yes-button et –no-button.

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.

NOM=$(whiptail --inputbox "Entrez votre nom :" 10 50 3>&1 1>&2 2>&3)
echo "Nom saisi : $NOM"

Mais, c’est quoi au juste ce 3>&1 1>&2 2>&3 ?

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 whiptail. Dans notre cas, voici précisément ce qu'il se passe :

  1. 3>&1 : on duplique la sortie standard (stdout, alias descripteur 1) vers un nouveau descripteur de fichier temporaire (3). Cela permet de sauvegarder la sortie normale avant de la modifier.
  2. 1>&2 : on redirige la sortie standard (1) vers la sortie d'erreur standard (2).
  3. 2>&3 : on redirige la sortie d'erreur (2) vers le descripteur temporaire (3), 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 whiptail affiche normalement les résultats sur stderr (2). Grâce à ces redirections, on s'assure que la valeur entrée est bien récupérée dans la variable appelée $NOM.

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 :

if [ $? -eq 0 ]
  • 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.

MDP=$(whiptail --passwordbox "Entrez votre mot de passe :" 10 50 3>&1 1>&2 2>&3)
echo "Mot de passe saisi : $MDP"

Résultat :

  • La barre de progression

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

{

for i in {1..100}; do
echo $i
sleep 0.05
done

} | whiptail --gauge "Chargement en cours..." 10 50 0

On a ici un bloc d’instructions {…} qui envoie en pipe | des informations sur la progression (echo $i) à 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 à whiptail doit être contenue entre 0 et 100 (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.

CHOIX=$(whiptail --menu "Choisissez une option :" 15 60 4 \
"1" "Choix 1" \
"2" "Choix 2" \
"3" "Choix 3" \
"4" "Choix 4" \
3>&1 1>&2 2>&3)

echo "Vous avez choisi : $CHOIX"

Vous remarquerez ici plusieurs choses :

- Le 4 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 whiptail. 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 whiptail, 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 :

SELECTION=$(whiptail --checklist "Sélectionnez des éléments :" 15 60 3 \
"1" "Option A" ON \
"2" "Option B" OFF \
"3" "Option C" ON \
3>&1 1>&2 2>&3)

echo "Vous avez sélectionné : $SELECTION"

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 :

CHOIX=$(whiptail --radiolist "Sélectionnez un élément :" 15 60 3 \
"1" "Option A" OFF \
"2" "Option B" OFF \
"3" "Option C" ON \
3>&1 1>&2 2>&3)

echo "Vous avez sélectionné : $CHOIX"

Résultat :

IV. Conclusion

Avec whiptail, 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 whiptail : à vous de jouer !

author avatar
Stef J.
Administrateur systèmes et réseaux. Membre actif de la communauté IT-Connect, connu sous le pseudo de DeadManIII.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

6 commentaires sur “Script Bash – Ajoutez des boîtes de dialogue à vos scripts avec Whiptail

  • Zenity permet plus d’options que whiptail, dans un autre registre/autre syntaxe il y a aussi gum

    Répondre
    • Zenity propose certes plus d’options mais J’ai choisi de présenter whiptail car celui-ci fonctionne en mode terminal

      Répondre
  • Ça ajoute une dépendance au script, le script cesse d’être portable si les distributions ne pré-installent pas ce programme par défaut.

    L’article ne présentant pas de solution de secours dans le cas où whiptail, ça reste juste quelque chose pour jouer dans son coin.

    Répondre
    • Mouaips, whiptails ratisse quand même large (Debian & Ubuntu, RHEL, CentOS, Fedora, Rocky Linux, AlmaLinuxn Arch Linux & Manjaro). Le but n’étant pas de donner une commande universelle (ce qui en soit serait idiot puisque ça n’existe pas)

      Répondre
  • Merci pour la découverte. Je ne connaissais pas certaine options que tu as présenté… Je l’ai utilisé a une époque lointaine pour des stations de dev Ubuntu.
    Pour reprendre « zulgrib » dans un environnement de prod ou on a le droit de rien installer mais où on script quand même, c’est la merde 🙂 et il y en plus qu’on ne le croit…

    Ça n’empêche pas
    Que le sujet reste intéressant et que j’apprends des fonctions que je ne connais pas sur un outil que j’ai utilisé par le passé…
    Merci

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.