| 
 | 
|  | 
| 
 | 
| Questo documento è disponibile in: English Castellano ChineseGB Deutsch Francais Italiano Nederlands Russian Turkce | 
| 
 ![[Photo of the Authors]](../../common/images/KatjaAndGuido.jpg)  Katja and Guido Socher <katja(at)linuxfocusorg, %20guido(at)linuxfocus.org> About the authors: Katja è la redattrice per la Germania di LinuxFocus. Ama Tux, i film & photography e adora il mare. La sua pagina personale la trovate qui. Guido è un fan di lunga data di Linux; gli piace Linux perchè è stato creato da gente onesta e disponibile.Questo è uno dei motivi per i quali si parla di opensource. La sua homepage si trova su linuxfocus.org/~guido. Tradotto in Italiano da: Kikko <kikko(at)linuxfocus.org> Contenuto: | 
![[Illustration]](../../common/images/article267/shelltalk.jpg) 
Premessa:
     Xdialog e dialog sono due classici strumenti che dotano i vostri script
per la shell di una interfaccia grafica (GUI). 
Per comprendere quest'articolo avrete bisogno di qualche nozione basilare di programmazione.
Per iniziare a conoscere i fondamenti della programmazione della shell potreste
leggere il nostro articolo 
Shell Programming.
bash
     Xdialog --yesno "Do you want to learn more about Xdialog?" 0 0;\
     case $? in
      0)
      echo "Result: Yes chosen.";;
      1)
      echo "Result: No chosen.";;
      255)
      echo "ESC pressed.";;
     esac
     
![[yes/no Xdialog]](../../common/images/article267/yesno.gif) 
     ![[yes/no dialog]](../../common/images/article267/yesno_noX.gif) 
     
dialog --help
  oppure
     
Xdialog --help
     
dialog --yesno "text string" <height> <width>
Una volta digitato "dialog" o "Xdialog" dovrete scrivere il nome del box che avete scelto, più i suoi parametri specifici.
#!/bin/sh
#
#DIALOG=Xdialog
DIALOG=dialog
#
# name of your default isp:
defaultisp=maxnet
#
error()
{
    echo "$1"
    exit 2
}
help()
{
  cat <<HELP
pppdialout -- select an ISP and dial out.
All available ISPs must have a config file in /etc/ppp/peers
pppdialout executes the ppp-on/ppp-off scripts as described
in http://linuxfocus.org/English/March2001/article192.shtml
pppdialout, copyright gpl, http://linuxfocus.org/English/November2002
HELP
  exit 0
}
# parse command line:
while [ -n "$1" ]; do
case $1 in
    -h) help;shift 1;; # function help is called
    --) shift;break;; # end of options
    -*) echo "error: no such option $1. -h for help";exit 1;;
    *)  break;;
esac
done
tempfile=/tmp/pppdialout.$$
trap "rm -f $tempfile" 1 2 5 15
# check if we have a ppp network interface
if /sbin/ifconfig | grep '^ppp' > /dev/null; then
    # we are already online
    $DIALOG --title "go offline" --yesno "Click YES to \
                     terminate the ppp connection" 0 0
    rval="$?"
    clear
    if [ "$rval" = "0" ]; then
        echo "running /etc/ppp/scripts/ppp-off ..."
        /etc/ppp/scripts/ppp-off
    fi
else
    # no ppp connection found, go online
    # get the names of all available ISP by listing /etc/ppp/peers
    for f in `ls /etc/ppp/peers`; do
        if [ -f "/etc/ppp/peers/$f" ]; then
            isplist="$isplist $f =="
        fi
    done
    [ -z "$isplist" ]&&error "No isp def found in /etc/ppp/peers"
    #
    $DIALOG --default-item "$defaultisp" --title "pppdialout"  \
         --menu "Please select one of\
    the following ISPs for dialout" 0 0 0 $isplist 2> $tempfile
    rval="$?" # return status, isp name will be in $tempfile
    clear
    if [ "$rval" = "0" ]; then
        isp=`cat $tempfile`
        echo "running /etc/ppp/scripts/ppp-on $isp..."
        /etc/ppp/scripts/ppp-on "$isp"
    else
        echo "Cancel..."
    fi
    rm -f $tempfile
fi
# end of pppdialout
Come funziona lo script:
  All'inizio definisce qualche funzione, errori ed help e poi controlla gli argomenti
  da linea di comando e viene definito un nome per il file temporaneo (/tmp/pppdialout.$$).
  $$ è il nome del processo corrente e consiste in un numero unico per
  ogni computer. L'espressione "trap" è eseguita se il programma
  viene chiuso in modo anomalo (ad esepio se l'utente clicca ctrl-c) a cancella
  il file temporaneo. Dopo controlla se siamo ancora in linea o meno (comando:
  /sbin/ifconfig | grep '^ppp'). Se siamo ancora in linea allora apre una yesno-box,
  come quella che abbiamo già visto prima, e chiede all'utente se vuol
  continuare offline. Se non siamo più online si apre la finestra-menu.
  Qui abbiamo la lista di tutti gli ISP disponibili contenuti nel file /etc/ppp/peers
  (ls /etc/ppp/peers). La sintassi del menu box è:
dialog --menu "text" <height> <width> <menu height> <tag1> <description> ...
I parametri<height>, <width> e <menu height> vengono nuovamente settati a zero (in modo da avere un dimensionamento automatico) e quindi il programma aspetta che vengano immessi due parametri (<tag1> <description>). Non forniremo una descrizione dettagliata, perciò per qualcuno potrebbero essere discorsi di difficile comprensione. I dati nella variabile isplist dovrebbero risultare qualcosa del genere:isp1 == isp2 == isp3 ==
Il risultato della scelta fatta dall'utente viene stampata da (X)dialog sullo standard error. Il comando di shell "2> $tmpfile" lo scrive nel tmpfile. Il menu box offre anche la possibilità di cancellare. Quindi dobbiamo controllare $? (exit status) per capire quale pulsante è stato premuto.![[pppdialout with xdialog]](../../common/images/article267/xdialog_1.gif) 
![[pppdialout with xdialog]](../../common/images/article267/xdialog_2.gif) 
![[pppdialout with dialog]](../../common/images/article267/dialog_1.gif) 
![[pppdialout with dialog]](../../common/images/article267/dialog_2.gif) 
mktgz yourpackage .
Questo comando mostra tutti i file nella directory corrente (".") e potete selezionarna altre da includere nel vostro pacchetto vostropacchetto.tar.gz. Potete scaricare qui (mktgz.txt) mktgz. Non ci addentreremo nelle linee di codice perchè quello che avete letto qui dovrebbe bastarvi per capire da soli il contenuto di questo script.grep -i "somestring" file.txt | sort | uniq | wc -l(per chi non avesse abbastanza esperienza con le shell UNIX: Questo comando conta quante linee del file file.txt contengono il termine "somestring")
| 
 | 
| Webpages maintained by the LinuxFocus Editor team © Katja and Guido Socher, FDL LinuxFocus.org Click here to report a fault or send a comment to LinuxFocus | Translation information: 
 | 
2002-12-27, generated by lfparser version 2.29