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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Questa è la revisione <strong>di</strong> Rick Boivie dello script tree <strong>di</strong> Jor<strong>di</strong> Sanfeliu.<br />

Esempio A-17. tree: visualizzare l’albero <strong>di</strong> una <strong>di</strong>rectory<br />

#!/bin/bash<br />

# tree.sh<br />

Appen<strong>di</strong>ce A. Script aggiuntivi<br />

# Scritto da Rick Boivie.<br />

# Usato con il suo consenso.<br />

# È la versione rivista e semplificata <strong>di</strong> uno script<br />

#+ <strong>di</strong> Jor<strong>di</strong> Sanfeliu (e sistemato da Ian Kjos).<br />

# Il presente script sostituisce la precedente versione apparsa<br />

#+ nelle precedenti release della <strong>Guida</strong> Avanzata <strong>di</strong> Scripting <strong>Bash</strong>.<br />

# ==> Commenti aggiunti dall’autore del libro.<br />

ricerca () {<br />

for <strong>di</strong>r in ‘echo *‘<br />

# ==> ‘echo *‘ elenca tutti i file della <strong>di</strong>rectory <strong>di</strong> lavoro corrente,<br />

#+ ==> senza interruzioni <strong>di</strong> riga.<br />

# ==> Effetto simile a for <strong>di</strong>r in *<br />

# ==> ma "<strong>di</strong>r in ‘echo *‘" non elabora i file i cui nomi contengono spazi.<br />

do<br />

if [ -d "$<strong>di</strong>r" ] ; then # ==> Se si tratta <strong>di</strong> una <strong>di</strong>rectory (-d)...<br />

zz=0 # ==> Variabile temporanea per registrare il livello<br />

# ==> della <strong>di</strong>rectory.<br />

while [ $zz != $1 ] # Per la gestione del ciclo interno.<br />

do<br />

echo -n "| " # ==> Visualizza il simbolo <strong>di</strong> collegamento<br />

# ==> verticale, con 2 spazi & nessun "a capo"<br />

# ==> per effetuare l’indentazione.<br />

zz=‘expr $zz + 1‘ # ==> Incrementa zz.<br />

done<br />

if [ -L "$<strong>di</strong>r" ] ; then # ==> Se la <strong>di</strong>rectory è un link simbolico ...<br />

echo "+---$<strong>di</strong>r" ‘ls -l $<strong>di</strong>r | sed ’s/^.*’$<strong>di</strong>r’ //’‘<br />

# ==> Visualizza il simbolo <strong>di</strong> collegamento orizzontale seguito dal nome<br />

# ==> della <strong>di</strong>rectory, ma...<br />

# ==> cancella la parte riguardante data/ora.<br />

else<br />

echo "+---$<strong>di</strong>r" # ==> Visualizza il simbolo <strong>di</strong> collegamento<br />

# ==> orizzontale...e il nome della <strong>di</strong>rectory.<br />

num<strong>di</strong>r=‘expr $num<strong>di</strong>r + 1‘ # ==> Incrementa il contatore delle <strong>di</strong>rectory.<br />

if cd "$<strong>di</strong>r" ; then # ==> Se si può accedere alla sotto<strong>di</strong>rectory...<br />

ricerca ‘expr $1 + 1‘ # ricorsività ;-)<br />

# ==> Funzione che richiama se stessa.<br />

cd ..<br />

fi<br />

fi<br />

fi<br />

done<br />

}<br />

638

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

Saved successfully!

Ooh no, something went wrong!