GNU/Linux >> Tutoriels Linux >  >> Linux

Interfaces utilisateur avec dialogue. Script bash (IV)

Ceci est le dernier article d'une série consacrée aux scripts Gnu Bash. Sur le premier article, nous venons de créer un script simple avec des commandes, les unes après les autres. Nous avons également vu certaines variables utilisées.
Le deuxième article couvrait certaines structures de contrôle bash. Le troisième couvrait les redirections, les canaux et la substitution de commandes.
Sur ce dernier (pour l'instant), je montrerai comment créer des interfaces utilisateur avec dialogue dans nos scripts.

Boîte de dialogue d'installation

La source peut être téléchargée pour compilation à partir d'ici :https://invisible-island.net/dialog/. Pour installer des binaires précompilés, votre distribution a sûrement un package nommé "dialog" que vous pouvez installer avec les outils de package.

Options générales

Les options suivantes s'appliquent à chaque widget que nous pouvons utiliser dans la boîte de dialogue. Ceux listés ici ne sont pas tous, mais ceux que j'utilise le plus.

  • --lignes ascii Plutôt que de tracer des lignes graphiques autour des cases, "+" et "-" au même endroit.
  • --titre titre Spécifie une chaîne de titre à afficher en haut de la boîte de dialogue.
  • --default-button chaîne Définissez le bouton présélectionné dans un widget. Normalement, le premier bouton de chaque widget est le bouton par défaut.
  • --default-item chaîne Définissez l'élément par défaut dans une liste de contrôle, un formulaire ou une zone de menu.
  • --no-lines Plutôt que de tracer des lignes autour des cases, dessinez des espaces au même endroit.
  • --pas d'ombre Supprimer les ombres qui seraient dessinées à droite et en bas de chaque boîte de dialogue
  • --backtitle backtitle Spécifie une chaîne de titre arrière à afficher en haut de l'écran.
  • --stdout Sortie directe vers la sortie standard. Utile pour stocker le choix ou la réponse de l'utilisateur dans une variable

Par exemple :

dialog --backtitle 'this is backtitle' --title 'Title' --infobox "This is just an infobox with some options settled" 0 0

produirait cette sortie :

Autres exemples :

Ma suggestion pour les scripts avec plusieurs écrans est d'ajouter un alias avec quelques options générales afin que vous n'ayez pas besoin de taper (ou de copier) à chaque fois, comme ceci :

alias dialog="dialog --backtitle 'this is backtitle' --title 'Title' --stdout"
dialog --infobox "This is just an infobox" 0 0

Quelques widgets

Infobox

C'est l'exemple d'en haut. La syntaxe est :

--infobox text height width

Où texte est le texte à afficher, et hauteur et largeur sont la taille de la boîte de dialogue. Vous pouvez utiliser la sortie d'une commande pour le texte avec substitution de commande, c'est-à-dire --infobox "$(cat somefile.txt)" . La taille est exprimée en caractères, une valeur de 0 signifie automatique.

ouinon

Boîte de style de requête typique avec des boutons de réponse "Oui" et "Non". La syntaxe est :

--yesno text height width

Nous pouvons l'utiliser sur un bloc if-then-else avec un code comme celui-ci :

if dialog --yesno "continue?" 0 0
then
	echo "You choose to continue"
	some_command
	some_other_command
else 
	echo "no"
fi

Une liste déroulante de choix avec sélection d'entrée unique. La syntaxe est :

--menu text height width menu-height tagX itemX tagY itemY

Chaque entrée de menu se compose d'une chaîne de balise et d'une chaîne d'élément. Je pense que c'est génial de combiner avec un bloc case-esac comme dans l'exemple suivant :

case $(dialog --menu "A menu of choices " 0 0 0 a item\ 1 b item\ 2 c item\ 3 d item\ 4) 
in 
	a) 
		echo "Item A" 
		some commands
		;; 
	b)
		echo "Item B" 
		some other commands
		;; 
	*) 
		echo other
		;; 
esac

boîte de saisie

Une zone de saisie est utile lorsque vous souhaitez poser des questions nécessitant que l'utilisateur saisisse une chaîne comme réponse. La syntaxe est :

--inputbox text height width [init]

init est facultatif et peut être utilisé pour définir une réponse par défaut.

liste de contrôle

Une boîte de liste de contrôle est similaire à une boîte de menu :il y a plusieurs entrées présentées sous la forme d'un menu. Mais au lieu de choisir une seule entrée, chaque entrée peut être activée ou désactivée. La syntaxe est :

--checklist text height width list-height tag item status

l'état peut être activé ou désactivé. Nous pouvons travailler avec les options sélectionnées avec une boucle for et un bloc case pour évaluer les options sélectionnées. Exemple :

for i in $(dialog --checklist "A menu of choices " 0 0 0 a item\ 1 off b item\ 2 off c item\ 3 off )
do 
	case $i in
		a)
			echo "item 1 selected"
			;;
		b)
			echo "item 2 selected"
			;;
		c)
			echo "item 3 selected"
			;;
	esac
done

Une alternative est la radiolist où l'utilisateur peut choisir un seul élément.

jauge

Une barre de progression typique. Le compteur indique le pourcentage. Les nouveaux pourcentages sont lus à partir de l'entrée standard, un entier par ligne. La syntaxe est :

--gauge text height width [percent]

Le pourcentage est facultatif et représente le pourcentage initial effectué. Cela peut être utilisé avec des tuyaux. Par exemple :

seq 1 100|dialog --gauge "A gauge" 0 0

Calendrier

Une boîte de calendrier affiche le mois, le jour et l'année. La syntaxe est :

--calendar text height width day month year

Si les valeurs du jour, du mois ou de l'année sont manquantes ou négatives, la date actuelle est utilisée.

Où aller à partir d'ici

Je viens de montrer quelques-uns des widgets disponibles (il y en a plus d'une vingtaine). La page de manuel de la boîte de dialogue donne de l'aide pour chacun d'eux.

Bien sûr, la boîte de dialogue n'est pas le seul outil disponible pour créer des interfaces utilisateur textuelles. Il existe des alternatives comme Xdialog, Whiptail (tous deux mentionnés sur la page de manuel de la boîte de dialogue) ou Zenity. N'oubliez pas qu'il y a plus d'une façon de le faire.

Cette série de quatre articles sur les scripts bash est loin d'être complète. Mon intention est de vous rendre suffisamment curieux pour enquêter par vous-même. Gardez en main la page de manuel bash (qui peut parfois être déroutante, du moins pour moi). Et gardez plus près de vous le Advanced Bash Scripting Guide pour un guide plus complet, plein d'exemples.


Linux
  1. Script bash (I)

  2. Bash -c avec des paramètres positionnels ?

  3. Alias ​​avec variable dans bash

  4. Comment écrire une chaîne de plusieurs lignes en utilisant Bash avec des variables ?

  5. Créer un tableau avec toutes les interfaces réseau en bash

Bash Scripting - Tableau associatif expliqué avec des exemples

Bash Scripting - Tableau indexé expliqué avec des exemples

Bash Scripting - Déclaration de cas

Script bash (II)

Remplacement d'une sous-chaîne par une autre chaîne dans Bash

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques