Un vestito per gli script di shell
di Francesco CelebriniDialog/Xdialog, due strumenti che dotano gli script di un vestitino, ovvero di una GUI seppur semplice. Vediamoli insieme ad alcuni esempi.
Da alcuni elevato a forma d'arte, da altri considerato un "semplice linguaggio
di scripting", lo scripting della shell di Linux rimane comunque, da qualsiasi
lato lo si guardi, uno strumento potente e indispensabile per l'amministratore
di sistema e per l'utente evoluto.
Probabilmente alcuni di voi che lo utilizzano da tempo lo considereranno un linguaggio completo per le funzioni che deve svolgere, il che è certamente vero!
Ma potrebbe darsi il caso in cui un'interfaccia grafica, seppur semplice e minimale, possa agevolare alcune operazioni (raggruppare alcuni comandi usati di frequente in un menù, installare un programma con parecchie opzioni di installazione,
ecc..).
In questi casi vi vengono in aiuto DIALOG e XDIALOG, due strumenti
che dotano gli script di una GUI; per la precisione Dialog è basato sul
terminale mentre Xdialog è un programma per X11.
In sostanza, quello che fanno questi programmi è visualizzare diversi tipi di caselle di dialogo (casella di interrogazione con pulsanti di risposta "si"
e "no", lista scorrevole di scelte, caselle di testo, ecc..).
Questo breve articolo illustrerà solo alcuni esempi molto semplici.
Del resto se volete approfondire ci sono i siti http://hightek.org/dialog/
(per Dialog) e http://xdialog.dyns.net
(per Xdialog) dai quali potete scaricare i programmi stessi e la documentazione,
c'è il comando dialog+invio da terminale, un discreto numero di esempi
nella directory /usr/share/doc/dialog-0.9b/samples
(almeno per quanto riguarda Red Hat 9) e l'immancabile pagina man.
Vediamo ora il 1° esempio.
Aprite un file di testo vuoto e inserite il seguente contenuto:
# INIZIO SCRIPT #
#!/bin/bash
dialog --title "titolo" --backtitle "titolo di fondo" --yesno
"Ti piace Dialog?" 0 0; \
# utilizziamo qui una casella di interrogazione con i pulsanti di risposta "si"
e "no",
# diamo un titolo e un titolo di fondo,
# il doppio zero finale (altezza e larghezza) indica che la finestra viene
# dimensionata automaticamente (provate a dargli qualche valore numerico)
case $? in
0) echo "benissimo!" ;;
1) echo "peccato..." ;;
255) echo "uscita con il tasto ESC" ;;
esac
# nel caso in cui si seleziona il pulsante "si" viene stampato a monitor
# il messaggio "benissimo!"
# nel caso in cui si seleziona il pulsante "no" viene stampato a monitor
# il messaggio "peccato..."
# nel caso in cui premiamo il tasto ESC viene stampato a monitor
# il messaggio "uscita con il tasto ESC"
# FINE SCRIPT #
Salvate il file con il nome, ad es., script,
modificate i permessi (es.: chmod 700 script),
lanciatelo (es.: ./script) e vedete i risultati.
Semplice.....ma non molto utile direi.
Ecco allora un altro esempio, con Xdialog questa volta e quindi utilizzabile da ambiente grafico, che io utilizzo per avviare la connessione a Internet con il modem ADSL Speedtouch USB.
Create il file avvia_connessione contenente il seguente codice:
# INIZIO SCRIPT #
#!/bin/bash
Xdialog --yesno "Vuoi connetterti a internet?" 0 0; \
case $? in
0) modem_run -m -f /usr/share/speedtouch/mgmt.o; pppd call adsl; ifconfig ppp0;;
1) exit;;
esac
# FINE SCRIPT #
Per disconnettersi create il file ferma_connessione con il seguente codice:
# INIZIO SCRIPT #
#!/bin/bash
Xdialog --yesno "Vuoi disconnetterti da internet?" 0 0; \
case $? in
0) killall ppp0;;
1) exit;;
esac
# FINE SCRIPT #
E veniamo all'ultimo esempio.
Supponiamo di voler creare un menù che contiene alcuni comandi e operazioni
utilizzati di frequente.
Il contenuto dello script sarà il seguente:
# INIZIO SCRIPT #
#!/bin/bash
dialog --menu "Menù di scelta" 0 0 0 \
# creiamo un menù di scelta
# il triplo 0 finale (altezza, larghezza, altezza menù) indica che la finestra
# viene dimensionata automaticamente
1 "Backup" \
2 "Avvia ambiente grafico" \
3 "Esci" 2> /tmp/menu.$$
# le opzioni selezionate vengono mostrate come standard error e redirette nel
file
# temporaneo menu.$$ che in seguito viene eliminato
opt=`cat /tmp/menu.$$`
# il simbolo ` si ottiene premendo ALT+96 da tastiera in codice ascii
rm -rf /tmp/menu.$$
case $opt in
1) tar -cvzf /root/backup.tar.gz /home; read;;
2) startx;;
3) exit;;
esac
# per ogni voce di menù viene eseguito il comando indicato
# FINE SCRIPT #
A voi approfondire l'argomento.