GNU/Linux >> Linux Esercitazione >  >> Linux

Interfacce utente con finestra di dialogo. Scripting Bash(IV)

Questo è l'ultimo articolo di una serie incentrata sullo scripting di Gnu Bash. Nel primo articolo abbiamo appena creato un semplice script con i comandi, uno dopo l'altro. Abbiamo anche visto l'uso di alcune variabili.
Il secondo articolo riguardava alcune strutture di controllo bash. Il terzo riguardava reindirizzamenti, pipe e sostituzione dei comandi.
Su quest'ultimo (per ora) mostrerò come creare interfacce utente con dialog nei nostri script.

Finestra di installazione

Il sorgente può essere scaricato per la compilazione da qui:https://invisible-island.net/dialog/. Per installare i binari precompilati la tua distribuzione ha sicuramente un pacchetto chiamato "dialog" che puoi installare con gli strumenti del pacchetto.

Opzioni generali

Le seguenti opzioni si applicano a ogni widget che possiamo usare nella finestra di dialogo. Quelli elencati qui non sono tutti, ma quelli che uso di più.

  • --ascii-lines Invece di disegnare linee grafiche intorno ai riquadri, “+” e “-” nello stesso punto.
  • --title titolo Specifica una stringa del titolo da visualizzare nella parte superiore della finestra di dialogo.
  • --default-button stringa Imposta il pulsante preselezionato in un widget. Normalmente il primo pulsante in ogni widget è quello predefinito.
  • --default-item stringa Imposta l'elemento predefinito in un elenco di controllo, modulo o casella di menu.
  • --nessuna riga Invece di disegnare linee attorno ai riquadri, disegna spazi nello stesso punto.
  • --nessuna ombra Elimina le ombre che verrebbero disegnate a destra e in fondo a ciascuna finestra di dialogo
  • --backtitle backtitle Specifica una stringa di backtitle da visualizzare nella parte superiore dello schermo.
  • --stdout Uscita diretta sull'uscita standard. Utile per memorizzare la scelta o la risposta dell'utente in una variabile

Ad esempio:

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

produrrebbe questo output:

Altri esempi:

Il mio suggerimento per gli script con più schermate è di aggiungere un alias con alcune opzioni generali in modo da non dover digitare (o copiare) ogni volta, in questo modo:

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

Alcuni widget

Infobox

È l'esempio dall'alto. La sintassi è:

--infobox text height width

Dove testo è il testo da visualizzare e altezza e larghezza sono le dimensioni della finestra di dialogo. Puoi usare l'output di un comando per il testo con la sostituzione del comando, ad es. --infobox "$(cat somefile.txt)" . La dimensione è espressa in caratteri, un valore 0 significa automatico.

Tipica casella di stile di query con pulsanti di risposta "Sì" e "No". La sintassi è:

--yesno text height width

Possiamo usarlo su un blocco if-then-else con un codice come questo:

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

Un elenco a scorrimento di scelte con selezione a voce singola. La sintassi è:

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

Ciascuna voce di menu è composta da una stringa di tag e da una stringa di voce. Penso che sia fantastico da combinare con un blocco case-esac come nel prossimo esempio:

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

inputbox

Una casella di input è utile quando si desidera porre domande che richiedono all'utente di inserire una stringa come risposta. La sintassi è:

--inputbox text height width [init]

inizializzazione è facoltativo e può essere utilizzato per impostare una risposta predefinita.

lista di controllo

Una casella di controllo è simile a una casella di menu:ci sono più voci presentate sotto forma di menu. Ma invece di scegliere una sola voce, ogni voce può essere attivata o disattivata. La sintassi è:

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

lo stato può essere attivato o disattivato. Possiamo lavorare con le opzioni selezionate con un ciclo for e un case block per valutare le opzioni selezionate. Esempio:

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

Un'alternativa è la lista radio in cui l'utente può scegliere un solo elemento.

indicatore

Una tipica barra di avanzamento. Il contatore indica la percentuale. Le nuove percentuali vengono lette dall'input standard, un intero per riga. La sintassi è:

--gauge text height width [percent]

La percentuale è facoltativa e rappresenta la percentuale iniziale ottenuta. Questo può essere utilizzato con i tubi. Ad esempio:

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

Calendario

Una casella del calendario mostra mese, giorno e anno. La sintassi è:

--calendar text height width day month year

Se i valori di giorno, mese o anno sono mancanti o negativi, viene utilizzata la data corrente.

Dove andare da qui

Ho appena mostrato alcuni dei widget disponibili (ce ne sono più di venti). La pagina di manuale della finestra di dialogo fornisce aiuto per tutti loro.

Naturalmente, la finestra di dialogo non è l'unico strumento disponibile per creare interfacce utente di testo. Ci sono alternative come Xdialog, Whiptail (entrambi menzionati nella manpage della finestra di dialogo) o Zenity. Ricorda che c'è più di un modo per farlo.

Questa serie di quattro articoli sullo scripting bash è molto lontana per essere completa. La mia intenzione è di farti sentire abbastanza curioso da indagare da solo. Tieni in mano la manpage di bash (che a volte può creare confusione, almeno per me). E tieni più vicino a te la Advanced Bash Scripting Guide per una guida più completa, piena di esempi.


Linux
  1. Script Bash(I)

  2. Bash -c con parametri posizionali?

  3. Alias ​​con variabile in bash

  4. Come scrivere più stringhe di righe usando Bash con variabili?

  5. Crea un array con tutte le interfacce di rete in bash

Bash Scripting – Array associativo spiegato con esempi

Bash Scripting – Array indicizzato spiegato con esempi

Bash Scripting – Case Statement

Script Bash(II)

Sostituzione di una sottostringa con un'altra stringa in Bash

Bash Scripting Introduzione Tutorial con 5 esempi pratici