GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare Whistail per creare script interattivi più intuitivi

Pochi amministratori di sistema nel mondo Linux hanno bisogno di essere convinti della potenza e dell'importanza degli script. Gli script sono ovunque e sai che sono essenziali per l'amministrazione del sistema Linux. Molti script vengono eseguiti in silenzio, anche se vengono avviati manualmente da un utente o da un amministratore.

Alcuni script, tuttavia, trasmettono informazioni agli utenti o richiedono loro informazioni. Puoi utilizzare funzionalità di scripting come echo o read per raggiungere questi obiettivi. Sfortunatamente, nessuno di questi strumenti mostra le informazioni in modo elegante o in un modo che attiri l'attenzione dell'utente.

Whiptail aggiunge una finestra di dialogo più interattiva ai tuoi script. Queste caselle forniscono informazioni, richiedono input o forzano un riconoscimento. Il contenuto visualizzato è in un formato di interfaccia utente basata su testo (TUI) e viene navigato con la scheda chiave. Le selezioni vengono scelte con lo Spazio chiave.

In questo articolo, ti guiderò attraverso l'installazione di whiptail (è facile!) e poi dimostrare alcuni esempi di base.

[ Ai lettori è piaciuto anche: Quali linguaggi di programmazione sono utili per gli amministratori di sistema? ]

Installa Whistail

L'installazione è facile. Sto usando Fedora 33 per questi esempi. Whiptail è incluso come parte della più ampia libreria di newt, che aggiunge funzionalità alle finestre TUI.

Installa whiptail utilizzando il seguente comando:

[damon@localhost ~]$ sudo dnf install newt

Questo è tutto per l'installazione.

In questo articolo creerai singoli file vim con il codice specifico di whiptail. Ricordarsi di svolgere le seguenti attività per ogni file dimostrato:

  • Nominalo chiaramente
  • Rendilo eseguibile digitando chmod 744 demo.sh
  • Eseguilo usando ./ prima del nome del file se la posizione non è lungo il PERCORSO

Nota :Presumo vim perché lo preferisco. Nano o qualsiasi altro editor di testo è sufficiente.

Successivamente, è il momento di coinvolgere alcuni script.

Visualizza una finestra di dialogo di base

In realtà non hai bisogno di uno script per visualizzare una finestra di dialogo di base da whiptail . In questo esempio dichiarerai e poi chiamerai una variabile. La variabile è semplicemente un messaggio di qualche tipo che verrà riconosciuto con un OK pulsante. Non viene offerta alcuna scelta e non viene utilizzata la navigazione.

Al prompt dei comandi, digita le seguenti informazioni:

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

Una volta visualizzata l'interfaccia, nota che il titolo che hai specificato appare nella barra in alto. È presente anche il tuo messaggio. Il OK il pulsante è disponibile. Nel whiptail comando, ne hai inseriti due

valori:25 e 80 . Questi valori sono misurazioni di colonna e possono essere regolati. Definiscono la dimensione della finestra dell'interfaccia. Fai attenzione a selezionare una dimensione che non occupi l'intero schermo e impedisca all'utente di vedere l'intero messaggio o di selezionare OK . La maggior parte delle finestre di Terminale sarà impostata su 80 colonne o più.

Dopo aver osservato tutti i componenti dell'interfaccia, seleziona OK premendo Invio chiave.

In questo esempio, hai utilizzato due opzioni:--msgbox e --title

E ora un esempio più interessante.

Genera una query

Possono essere scritti script che accettano l'input di un utente. Se stai scrivendo uno script che interagirà con utenti non tecnici, potrebbe essere utile creare un'interfaccia più intuitiva. In questo esempio, all'utente verranno poste due domande:Nome e Paese.

Crea un file chiamato query.sh con il seguente contenuto.

#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)"

Osserva che in questo esempio hai utilizzato --inputbox invece di --msgbox . Hai organizzato il whiptail codice come un'istruzione if/then.

Gli 8 e 39 i valori definiscono la dimensione della finestra di dialogo. Se stai seguendo nel tuo ambiente di laboratorio, sostituisci 39 con 10 , salva le modifiche ed esegui nuovamente il whiptail codice. Vedrai che la finestra di dialogo è troppo piccola per essere utile. Utilizza la scheda tasto per selezionare Annulla , quindi reimposta il valore della dimensione su 39 da 10 .

Non dimenticare di impostare i permessi per rendere eseguibile il file e utilizzare ./ per eseguirlo dalla posizione corrente.

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

Ecco uno sguardo ai risultati dopo aver completato la finestra di dialogo:

Hai fornito informazioni agli utenti tramite una finestra di messaggio e raccolto informazioni dall'utente tramite una casella di input. Quindi, poni all'utente alcune domande aggiuntive.

Crea una finestra di dialogo sì/no

Ci sono molte varianti per porre domande all'utente. In questo caso, utilizzerai una semplice query sì/no per scoprire se oggi è martedì. Puoi farlo creando un file di prova chiamato tuesday.sh e inserendo il seguente contenuto al suo interno:

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

Invece di --inputbox o --msgbox dagli esempi precedenti, hai usato --yesno opzione. Come l'esempio precedente, questo è organizzato come una query if/then.

Ecco l'output risultante:

Il --yesno box option ci permette anche di modificare il contenuto dei campi "Sì" e "No". Ecco un esempio:

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

L'unica modifica all'esempio è l'aggiunta dei due --no-button e --yes-button opzioni, con il testo corrispondente (in questo caso "Non martedì" e "Martedì").

Ecco come appare la finestra di dialogo risultante:

Un'ultima cosa. Whiptail invia l'input dell'utente a stderr. Sì, hai letto bene:stderr e

non stdout, che è il punto in cui raccogli l'input dell'utente per utilizzarlo nello script. Il modo per aggirare questo problema è invertire il reindirizzamento in modo che l'input dell'utente vada a stdout.

Ecco la frase per farlo:

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

Spiegazione:

  • Crea un descrittore di file 3 che punti a 1 (stdout)
  • Reindirizza 1 (stdout) a 2 (stderr)
  • Reindirizza 2 (stderr) al descrittore di file 3, che punta a stdout

Ecco come appare in uno snippet di script dal --inputbox sopra esempio:

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

[ Cheat sheet gratuito:glossario Kubernetes ] 

Concludi

Ho mostrato diversi esempi di base, ma whiptail può fare molto di più. Ho fornito abbastanza informazioni qui per iniziare e ci sono molti tutorial utili online. I tuoi script avranno bisogno di un modo per consumare l'input che gli utenti hanno inserito. Ti incoraggio a rivedere i tuoi script interattivi per determinare se l'aggiunta di finestre di dialogo TUI sarebbe utile.

Ecco un elenco delle opzioni della casella principale disponibili per whiptail :

  • --titolo
  • --casella informativa
  • --msgbox
  • --sì
  • --casella di immissione
  • --passwordbox
  • --menu
  • --casella di testo
  • --lista di controllo
  • --radiolista
  • --indicatore

Linux
  1. Come creare e utilizzare i sottodomini

  2. Come utilizzare GParted per creare e ridimensionare facilmente le partizioni

  3. Come utilizzare gli input negli script della shell

  4. Come utilizzare rsyslog per creare un server di aggregazione dei registri Linux

  5. Cosa sono gli script di shell? Come creare script di shell?

Come creare script di shell

Come creare finestre di dialogo della GUI negli script Bash con Whiptail in Linux

Come creare documenti con gli script Bash

Come utilizzare il comando echo negli script Bash in Linux

Come creare e utilizzare file di scambio su Linux

Come utilizzare if-else negli script della shell?