GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser whiptail pour créer des scripts interactifs plus conviviaux

Peu d'administrateurs système dans le monde Linux ont besoin d'être convaincus de la puissance et de l'importance des scripts. Les scripts sont partout et vous savez qu'ils sont essentiels à l'administration du système Linux. De nombreux scripts s'exécutent en mode silencieux, même s'ils sont lancés manuellement par un utilisateur ou un administrateur.

Certains scripts, cependant, transmettent des informations aux utilisateurs ou leur demandent des informations. Vous pouvez utiliser des fonctionnalités de script telles que echo ou read pour atteindre ces objectifs. Malheureusement, aucun de ces outils n'affiche les informations de manière sophistiquée ou d'une manière qui attire l'attention de l'utilisateur.

Whiptail ajoute une boîte de dialogue plus interactive à vos scripts. Ces cases fournissent des informations, sollicitent une entrée ou forcent un accusé de réception. Le contenu affiché est dans un format d'interface utilisateur à base de texte (TUI) et est navigué avec l'Tab clé. Les sélections sont choisies avec l'Espace clé.

Dans cet article, je vous explique l'installation de whiptail (c'est facile !), puis montrez quelques exemples de base.

[ Les lecteurs ont également aimé : Quels langages de programmation sont utiles pour les administrateurs système ? ]

Installer Whiptail

L'installation est facile. J'utilise Fedora 33 pour ces exemples. Whiptail fait partie de la plus grande bibliothèque newt, qui ajoute des fonctionnalités aux fenêtres TUI.

Installer whiptail en utilisant la commande suivante :

[damon@localhost ~]$ sudo dnf install newt

C'est tout pour l'installation.

Dans cet article, vous allez créer des fichiers vim individuels avec le code spécifique à whiptail. N'oubliez pas d'accomplir les tâches suivantes pour chaque fichier de démonstration :

  • Nommez-le clairement
  • Rendez-le exécutable en tapant chmod 744 demo.sh
  • Exécutez-le en utilisant ./ avant le nom du fichier si l'emplacement n'est pas le long du PATH

Remarque :J'assume vim parce que je le préfère. Nano ou tout autre éditeur de texte suffit.

Ensuite, il est temps d'impliquer des scripts.

Afficher une boîte de dialogue de base

Vous n'avez pas réellement besoin d'un script pour afficher une boîte de dialogue de base à partir de whiptail . Dans cet exemple, vous allez déclarer puis appeler une variable. La variable est simplement un message quelconque qui sera acquitté par un OK bouton. Aucun choix n'est proposé et aucune navigation n'est utilisée.

À l'invite de commande, saisissez les informations suivantes :

[damon@localhost ~]$ message="Today, we will learn about Whiptail."
[damon@localhost ~]$ whiptail --msgbox --title "Intro to Whiptail" "$message" 25 80

Une fois l'interface affichée, notez que le titre que vous avez spécifié apparaît dans la barre supérieure. Votre message est également présent. Le OK bouton est disponible. Dans le whiptail commande, vous avez saisi deux

valeurs :25 et 80 . Ces valeurs sont des mesures de colonne et peuvent être ajustées. Ils définissent la taille de la fenêtre d'interface. Veillez à sélectionner une taille qui ne consomme pas tout l'écran et empêche l'utilisateur de voir l'intégralité du message ou de sélectionner OK . La plupart des fenêtres de terminal seront définies sur 80 colonnes ou plus.

Une fois que vous avez observé tous les composants de l'interface, sélectionnez OK en appuyant sur Entrée clé.

Dans cet exemple, vous avez utilisé deux options :--msgbox et --title

Et maintenant un exemple plus intéressant.

Générer une requête

Des scripts peuvent être écrits qui acceptent la saisie d'un utilisateur. Si vous écrivez un script qui interagira avec des utilisateurs non techniques, il peut être avantageux de créer une interface plus conviviale. Dans cet exemple, l'utilisateur se verra poser deux questions :nom et pays.

Créez un fichier nommé query.sh avec le contenu suivant.

#Part 1 - Query for the user's name
NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                        
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Greetings," $NAME
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

#Part 2 - Query for the user's country

COUNTRY=$(whiptail --inputbox "What country do you live in?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                       
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "I hope the weather is nice in" $COUNTRY
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

Notez que dans cet exemple, vous avez utilisé --inputbox au lieu de --msgbox . Vous avez organisé le whiptail code comme une instruction if/then.

Le 8 et 39 les valeurs définissent la taille de la boîte de dialogue. Si vous suivez dans votre propre environnement de laboratoire, remplacez 39 avec 10 , enregistrez vos modifications et réexécutez le whiptail code. Vous verrez que la boîte de dialogue est trop petite pour être utile. Utilisez l'onglet touche pour sélectionner Annuler , puis redéfinissez la valeur de taille sur 39 à partir de 10 .

N'oubliez pas de définir les autorisations pour rendre le fichier exécutable et utilisez ./ pour l'exécuter à partir de l'emplacement actuel.

[damon@localhost ~]$ chmod 777 query.sh 
[damon@localhost ~]$ ./query.sh 

Voici un aperçu des résultats après avoir rempli la boîte de dialogue :

Vous avez fourni des informations aux utilisateurs via une boîte de message et recueilli des informations auprès de l'utilisateur via une zone de saisie. Ensuite, posez à l'utilisateur quelques questions supplémentaires.

Créer une boîte de dialogue oui/non

Il existe de nombreuses variantes pour poser des questions à l'utilisateur. Dans ce cas, vous utiliserez une simple requête oui/non pour découvrir si nous sommes aujourd'hui mardi. Vous pouvez le faire en créant un fichier de test nommé tuesday.sh et en y plaçant le contenu suivant :

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78); then
    echo "Happy Tuesday, exit status was $?."
else
    echo "Maybe it will be Tuesday tomorrow, exit status was $?."

fi

Au lieu de --inputbox ou --msgbox dans les exemples précédents, vous avez utilisé le --yesno option. Comme l'exemple précédent, celui-ci est organisé comme une requête si/alors.

Voici le résultat :

Le --yesno L'option de boîte nous permet également de modifier le contenu des champs "Oui" et "Non". Voici un exemple :

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78 --no-button "Not Tuesday" --yes-button "Tuesday"); then
echo "Happy Tuesday, exit status was $?."
else
echo "Maybe it will be Tuesday tomorrow, exit status was $?."
fi

La seule modification apportée à l'exemple est l'ajout des deux --no-button et --yes-button options, avec leur texte correspondant (dans ce cas, "Pas mardi" et "Mardi").

Voici à quoi ressemble la boîte de dialogue résultante :

Une dernière chose. Whiptail envoie l'entrée de l'utilisateur à stderr. Oui, vous avez bien lu :stderr, et

pas stdout, où vous récupérez l'entrée de l'utilisateur pour l'utiliser dans le script. Le moyen de contourner ce problème consiste à inverser la redirection afin que l'entrée de l'utilisateur aille vers stdout.

Voici la phrase pour le faire :

3>&1 1>&2 2>&3

Explication :

  • Créer un descripteur de fichier 3 qui pointe vers 1 (stdout)
  • Redirection 1 (stdout) vers 2 (stderr)
  • Redirection 2 (stderr) vers le descripteur de fichier 3, qui pointe vers stdout

Voici à quoi cela ressemble dans un extrait de script du --inputbox ci-dessus exemple :

NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)

[ Aide-mémoire gratuit :glossaire Kubernetes ] 

Récapitulez

J'ai montré plusieurs exemples de base, mais whiptail peut faire beaucoup plus. J'en ai fourni suffisamment ici pour vous permettre de démarrer et il existe de nombreux didacticiels utiles en ligne. Vos scripts auront besoin d'un moyen de consommer l'entrée que les utilisateurs ont saisie. Je vous encourage à revoir vos scripts interactifs pour déterminer si l'ajout de boîtes de dialogue TUI serait utile.

Voici une liste des principales options de boîte disponibles pour whiptail :

  • --titre
  • --infobox
  • --boite de messagerie
  • --ouinon
  • --boîte de saisie
  • --passwordbox
  • --menu
  • --zone de texte
  • --liste de contrôle
  • --radioliste
  • --jauge

Linux
  1. Comment créer et utiliser des sous-domaines

  2. Comment utiliser GParted pour créer et redimensionner facilement des partitions

  3. Comment créer un alias et utiliser la commande Alias ​​sous Linux

  4. Comment utiliser les entrées dans vos scripts shell

  5. Comment utiliser rsyslog pour créer un serveur d'agrégation de journaux Linux

Comment créer des scripts shell

Comment créer des boîtes de dialogue GUI dans des scripts Bash avec Whiptail sous Linux

Comment créer des documents avec des scripts Bash

Comment utiliser la commande echo dans les scripts Bash sous Linux

Comment créer et utiliser un fichier d'échange sous Linux

Comment utiliser if-else dans les scripts shell ?