Créer des boîtes de dialogues en Bash
Bonjour à tous,
Aujourd’hui une petite astuce assez sympa pour apprendre à créer des programmes bash un petit plus « fancy » grâce à whiptail.
Vous savez ces petites boîtes de dialogues que l’on peut retrouver dans ce genre d’exemple :
Nous allons voir comment créer ce genre de boîtes de dialogues.
Sans plus tarder nous allons rentrer dans le vif du sujet
1. La Message Box
La prmière boîte de dialogue que nous allons voir est la message Box, elle permet d’afficher un petit message à l’écran.
whiptail --title "<titre>" --msgbox "<message>" <height> <width>
Pour afficher quelque chose qui ressemble à cela :
voici le code source bash
1 2 |
#!/bin/bash whiptail --title "Titre Message Box" --msgbox "Utilisation de whiptail pour la creation d'un messageBox. Cliquer sur Ok pour continuer." 10 60 |
2. Une boite de dialogue oui / non
La deuxième boite de dialogue que nous allons voir est la yes/no, elle permet d’afficher un message de confirmation avant d’executer une action.
whiptail --title "<titre>" --yesno "<text>" <height> <width>
1 2 3 4 5 6 |
#!/bin/bash if (whiptail --title "Boite de dialogue Oui / Non" --yesno "Voudrais-tu m'épouser ?" 10 60) then echo "C'est le plus beau jour de ma vie" else echo "Nooooooon !!" fi |
Si jamais vous pouvez personnalisé les réponses en précisant la valeur du bouton yes et no avec les attributs :
--yes-button "valeur du oui" --no-button "valeur non"
3. Input
La troisème boîte de dialogue est l’input box, elle permet à l’utilisateur de saisir une information.
whiptail --title "<titre>" --inputbox "<texte>" <height> <width> <default-text>
1 2 3 4 5 6 7 8 9 |
#!/bin/bash Name=$(whiptail --title "Input" --inputbox "Quel est ton prénom ?" 10 60 Morgan 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus = 0 ]; then echo "Okay, ton prénom est :" $Name else echo "Tu as annuler... :-(" fi |
Créer une password Box
Comme sont nom l’indique, c’est rès utile lorsqu’on veux que l’utilisateur renseigne un mot de passe
1 |
whiptail --title "titre" --passwordbox "message" <height> <width> |
1 2 3 4 5 6 7 8 9 |
#!/bin/bash PASSWORD=$(whiptail --title "Password Box" --passwordbox "Entrer votre mot de passe utilisateur" 10 60 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus = 0 ]; then echo "Votre mot de passe est : " $PASSWORD else echo "Vous avez annulez" fi |
Menu box
Très utile lorsqu’on veux demander à l’utilisateur de choisir parmi plusieurs choix
1 |
whiptail --title "titre" --menu "message" <height> <width> <menu height> [ <tag> <item> ] . . . |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash OPTION=$(whiptail --title "Menu Box" --menu "Choisissez votre distriubtion linux" 15 60 4 \ "1" "Ubuntu 14.04 LTS" \ "2" " Fedora 21" \ "3" "Manjaro" \ "4" "Arch linux" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus = 0 ]; then echo "Vous avez choisi la distribution : " $OPTION else echo "vous avez annulé" fi |
RadioList Box
La radiolist Box est très similaire au MenuBox, c’est à dire que vous pouvez choisir qu’un seul item, par contre l’avantage de la radiolist box c’est que vous pouvez selectionner un item par defaut.
1 |
whiptail --title "radiolist" --radiolist "message a afficher" <height> <width> <list height> [ <tag> <item> <status> ] . . . |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash DISTROS=$(whiptail --title "Test Checklist Dialog" --radiolist \ "What is the Linux distro of your choice?" 15 60 4 \ "debian" "Venerable Debian" ON \ "ubuntu" "Popular Ubuntu" OFF \ "centos" "Stable CentOS" OFF \ "mint" "Rising Star Mint" OFF 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus = 0 ]; then echo "Vous avez choisi la distribution :" $DISTROS else echo "Vous avez annulé" fi |
Checklist Box
1 |
whiptail --title "checklist" --checklist "message a afficher" <height> <width> <list height> [ <tag> <item> <status> ] . . . |
Même chose que le précédent exemple mais ce coup ci j’utilise la checklist
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash DISTROS=$(whiptail --title "Checklist Box" --checklist \ "Quel est votre distribution linux ?" 15 60 4 \ "debian 7" "Wheezy" OFF \ "ubuntu 14.04 LTS" "Trusty Tahr" ON \ "Fedora 21" "Twenty One" OFF \ "Elementary OS" "Luna" OFF 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus = 0 ]; then echo "Vous avez choisi la distribution :" $DISTROS else echo "Vous avez annulé" fi |
Progress Bar
Et enfin, la dernière boîte de dialogue qui peut s’avérer utile : la barre de progression
1 |
whiptail --gauge "Message à afficher" <height> <width> <inital percent> |
1 2 3 4 5 6 7 |
#!/bin/bash { for ((i = 0 ; i <= 100 ; i+=20)); do sleep 1 echo $i done } | whiptail --gauge "Veuillez patienter pendant l'installation" 6 60 0 |