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
$OfflineQuesto 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>.