This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.
La shell Bourne permette di definire funzioni. Queste sono molto simili agli alias della shell C, ma permettono più flessibilità. Una funzione ha la forma:
funzione () { comando; }
dove lo spazio dopo { e il punto e virgola (;) sono obbligatori; il punto e virgola può essere omesso facendo precedere a } un newline. Spazi e newline aggiuntivi sono permessi. Alcuni esempi di funzioni possono essere visti nel semplice file .profile discusso nei primi capitoli, dove si avevano delle funzioni per ls e ll:
ls() { /bin/ls -sbF "$@";}
ll() { ls -al "$@";}
La prima funzione ridefinisce ls(1) affinchè le opzioni
-sbF siano sempre fornite dal comando standard /bin/ls e in modo da agire in base all'input fornito, $@. La seconda di queste funzioni prende il valore corrente di ls (la funzione precedente) e aggiunge le opzioni -al.
Le funzioni sono molto utili negli script di shell. Il seguente script è una versione semplificata di uno script utilizzato per effettuare automaticamente il backup su nastro delle partizioni di sistema.
#!/bin/sh
# Script cron per un completo backup del sistema
HOST=`/bin/uname -n`
admin=frank
Mt=/bin/mt
Dump=/usr/sbin/ufsdump
Mail=/bin/mailx
device=/dev/rmt/0n
Rewind="$Mt -f $device rewind"
Offline="$Mt -f $device rewoffl"
# Failure - exit
failure () {
$Mail -s "Backup fallito - $HOST" $admin << EOF_failure
$HOST
Script cron backup fallito. A quanto pare non c'è il nastro nel dispositivo.
EOF_failure
exit 1
}
# Dump failure - exit
dumpfail () {
$Mail -s "Backup fallito - $HOST" $admin << EOF_dumpfail
$HOST
Script cron backup fallito. A quanto pare non c'è il nastro nel dispositivo.
EOF_dumpfail
exit 1
}
# Success
success () {
$Mail -s "Backup completato con successo - $HOST" $admin << EOF_success
$HOST
Script cron backup apparentemente riuscito. Il file /etc/dumpdates è:
`/bin/cat /etc/dumpdates`
EOF_success
}
# Conferma nastro nel device
$Rewind || failure
$Dump 0uf $device / || dumpfail
$Dump 0uf $device /usr || dumpfail
$Dump 0uf $device /home || dumpfail
$Dump 0uf $device /var || dumpfail
($Dump 0uf $device /var/spool/mail || dumpfail) && success
$Offline
Questo script illustra alcuni argomenti che sono stati trattati in questo documento. Lo script inizia settando i valori di alcuni parametri. HOST viene inizializzato dall'output di un comando, admin è l'amministratore di sistema, Mt, Dump e Mail sono nomi di programmi, device è il dispositivo speciale usato per accedere al nastro, Rewind e Offline contengono i comandi rispettivamente per riavvolgere e scaricare il nastro usando il riferimento Mt e le necessarie opzioni. Vengono definite tre funzioni: failure, dumpfail e success. Tutte le funzioni in questo script utilizzano la forma here document per realizzare il contenuto della funzione stessa. Si introducono ora gli operatori logici OR (||) e AND (&&); ciascuno è posizionato tra una coppia di comandi. Per l'operatore OR, il secondo comando viene eseguito solamente se il primo comando non è stato completato con successo. Per l'operatore AND, il secondo comando viene eseguito solamente se il primo comando è stato completato con successo.
Lo scopo principale dello script è realizzare i comandi Dump, ad esempio copiando i file system specificati. Prima si tenta di eseguire il riavvolgimento del nastro. Se questo fallisce, || failure, si esegue la funzione failure e si esce dal programma. Se invece questo ha successo si procede con il backup a turno di ogni partizione, ogni volta verificando che questa operazione sia completamente riuscita (|| dumpfail). Se questa operazione non viene eseguita completamente con successo si esegue la procedura dumpfail e si esce. Se l'ultimo backup ha successo si procede con la funzione success ((...) && success). In fine si riavvolge il nastro e lo si manda fuori linea affinchè altri utenti non possano accidentalmente scriverci sopra.
Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.