11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capitolo 11. Coman<strong>di</strong> interni e builtin<br />

rm /var/lock/LCK..ttyS3 # Cancella il lock file della porta seriale. Perché?<br />

exit 0<br />

# Esercizi:<br />

# --------<br />

# 1) Lo script deve verificare se è stato root ad invocarlo.<br />

# 2) Effettuate un controllo per verificare che, prima <strong>di</strong> tentarne la chiusura,<br />

#+ il processo che deve essere terminato sia effettivamente in esecuzione.<br />

# 3) Scrivete una versione alternativa dello script basata su ’fuser’:<br />

#+ if [ fuser -s /dev/modem ]; then . . .<br />

Esempio 11-13. Una versione <strong>di</strong> “rot13”<br />

#!/bin/bash<br />

# Una versione <strong>di</strong> "rot13" usando ’eval’.<br />

# Confrontatelo con l’esempio "rot13.sh".<br />

impvar_rot_13() # Co<strong>di</strong>fica "rot13"<br />

{<br />

local nomevar=$1 valoreval=$2<br />

eval $nomevar=’$(echo "$valoreval" | tr a-z n-za-m)’<br />

}<br />

impvar_rot_13 var "foobar" # Co<strong>di</strong>fica "foobar" con rot13.<br />

echo $var # sbbone<br />

impvar_rot_13 var "$var" # Co<strong>di</strong>fica "sbbone" con rot13.<br />

# Ritorno al valore originario della variabile.<br />

echo $var # foobar<br />

# Esempio <strong>di</strong> Stephane Chazelas.<br />

# Mo<strong>di</strong>ficato dall’autore del documento.<br />

exit 0<br />

Rory Winston ha fornito il seguente esempio che <strong>di</strong>mostra quanto possa essere utile eval.<br />

Esempio 11-14. Utilizzare eval per forzare una sostituzione <strong>di</strong> variabile in uno script Perl<br />

Nello script Perl "test.pl":<br />

...<br />

my $WEBROOT = ;<br />

...<br />

Per forzare la sostituzione <strong>di</strong> variabile provate:<br />

$export WEBROOT_PATH=/usr/local/webroot<br />

$sed ’s//$WEBROOT_PATH/’ < test.pl > out<br />

Ma questo dà solamente:<br />

my $WEBROOT = $WEBROOT_PATH;<br />

204

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!