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 10. Cicli ed alternative<br />

do<br />

echo "$file"<br />

done | sort # Se manca sort, l’elenco<br />

#+ non verrà or<strong>di</strong>nato.<br />

# Per essere precisi, in realtà in questo caso un ciclo non sarebbe necessario,<br />

#+ perché l’output del comando "find" viene espanso in un’unica parola.<br />

# Tuttavia, illustra bene questa modalità e ne facilita la comprensione.<br />

# Come ha evidenziato Dominik ’Aeneas’ Schnitzer,<br />

#+ se non si usa il "quoting" per $( find $<strong>di</strong>rectory -type l ) i nomi dei<br />

#+ file contenenti spazi non vengono visualizzati correttamente.<br />

# Il nome viene troncato al primo spazio incontrato.<br />

exit 0<br />

# Jean Helou propone la seguente alternativa:<br />

echo "Link simbolici nella <strong>di</strong>rectory \"$<strong>di</strong>rectory\""<br />

# Salva l’IFS corrente. Non si è mai troppo prudenti.<br />

VECCHIOIFS=$IFS<br />

IFS=:<br />

for file in $(find $<strong>di</strong>rectory -type l -printf "%p$IFS")<br />

do # ^^^^^^^^^^^^^^^^<br />

echo "$file"<br />

done|sort<br />

Lo stdout <strong>di</strong> un ciclo può essere re<strong>di</strong>retto in un file, come <strong>di</strong>mostra la piccola mo<strong>di</strong>fica apportata<br />

all’esempio precedente.<br />

Esempio 10-11. Link simbolici presenti in una <strong>di</strong>rectory salvati in un file<br />

#!/bin/bash<br />

# symlinks.sh: Elenca i link simbolici presenti in una <strong>di</strong>rectory.<br />

OUTFILE=symlinks.list # file <strong>di</strong> memorizzazione<br />

<strong>di</strong>rectory=${1-‘pwd‘}<br />

# Imposta come predefinita la <strong>di</strong>rectory <strong>di</strong> lavoro corrente, nel caso non<br />

#+ ne venga specificata alcuna.<br />

echo "Link simbolici nella <strong>di</strong>rectory \"$<strong>di</strong>rectory\"" > "$OUTFILE"<br />

echo "---------------------------" >> "$OUTFILE"<br />

for file in "$( find $<strong>di</strong>rectory -type l )" # -type l = link simbolici<br />

do<br />

echo "$file"<br />

done | sort >> "$OUTFILE" # stdout del ciclo re<strong>di</strong>retto<br />

# ^^^^^^^^^^^^^ al file <strong>di</strong> memorizzazione.<br />

166

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

Saved successfully!

Ooh no, something went wrong!