Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- La parte in Shell deve prevedere un solo parametro che deve essere il nome assoluto di un direttorio che
- identifica una gerarchia (G) all’interno del file system. Il comportamento atteso dal programma, dopo il controllo
- dei parametri, è organizzato in due fasi (Fasi A e B).
- Il programma nella fase A deve esplorare la gerarchia G specificata - tramite un file comandi ricorsivo, FCR - e
- deve contare globalmente i livelli di cui è costituita la gerarchia G (inclusa la radice).
- Al termine dell’intera esplorazione ricorsiva di G, si deve riportare sullo standard output il numero di livelli
- totali della gerarchia G. Quindi il programma passa nella fase B. In questa fase B, il programma deve chiedere
- all’utente un numero pari compreso fra 1 e il numero di livelli totali calcolati nella faseA: quindi si deve
- reinvocare FCR in modo da cercare nella gerarchia G specificata (inclusa la radice) tutti i direttori che si trovano
- al livello corrispondente al numero pari specificato dall’utente e per ognuno di essi si devono visualizzare
- TUTTE le informazioni associate agli elementi presenti esclusi i file nascosti.
- #!/bin/sh
- case $# in
- 1) case $1 in
- /*) if test ! -d $1 -o ! -x $1
- then
- echo $1 non direttorio
- exit 1
- fi;;
- *) echo $1 non nome assoluto; exit 2;;
- esac;;
- *) echo Errore: Usage is $0 dirass
- exit 3;;
- esac
- PATH=`pwd`:$PATH
- export PATH
- conta=0
- fase=A
- livello=0
- echo $conta > /tmp/tmpContaLivelli #scriviamo il valore di conta (cioe' 0) nel file temporaneo
- #invochiamo per la fase A: il quarto parametro ($livello) NON viene usato nella prima fase, ma lo passiamo lo stesso per uniformita'
- echo Stiamo iniziando la fase A
- FCR.sh $1 $conta $fase $livello
- #tot=`cat /tmp/tmpContaLivelli`
- read tot < /tmp/tmpContaLivelli
- echo Il numero di livelli totali della gerarchia = $tot
- #passiamo alla seconda fase
- echo Stiamo iniziando la fase B
- #adesso chiediamo all'utente quale livello vuole visualizzare
- echo -n "dammi il numero di livello pari che vuoi visualizzare (il numero deve essere compreso fra 1 e $tot " > /dev/tty
- read livello #chiediamo all'utente il numero di livello
- #echo $livello
- case $livello in
- *[!0-9]*) echo NON hai fornito un numero o non positivo
- exit 4;;
- *) #numero giusto;;
- esac
- if test $livello -ge 1 -a $livello -le $tot
- then
- echo $livello compreso OK
- if test `expr $livello % 2` -eq 0
- then
- echo $livello pari
- else
- echo $livello dispari #questo sarebbe un errore per il testo considerato, ma lo teniamo buono per fare un numero maggiore di prove
- fi
- else
- echo $livello NON compreso
- exit 5
- fi
- fase=B
- #passiamo alla seconda chiamata
- echo $conta > /tmp/tmpContaLivelli #riscriviamo il valore di conta (cioe' 0) nel file temporaneo
- FCR.sh $1 $conta $fase $livello
- #rimuoviamo il file temporaneo
- rm /tmp/tmpContaLivelli
- echo FINITO
- --------------------------------------------------------------------------------------------------------------------------------------
- #!/bin/sh
- #file comandi ricorsivo che torna il numero totale di livelli
- #contati fino a quel punto
- #echo siamo nella fase $3
- cd $1
- #il primo livello verra' contato come livello 1
- conta=`expr $2 + 1` #nota bene questa variabile conta NON e' quella dello script principale, ma e' una variabile conta LOCALE a questo script
- for i in *
- do
- if test -d $i -a -x $i
- then
- # echo stiamo per andare in `pwd`/$i
- FCR.sh `pwd`/$i $conta $3 $4
- ret=$?
- #prec=`cat /tmp/tmpContaLivelli` #oppure si puo' fare con read in ridirezione
- read prec < /tmp/tmpContaLivelli #leggiamo dal file temporaneo il valore del numero di livello
- # echo prec = $prec e ret = $ret
- if test $ret -gt $prec #se il valore calcolato in ricorsione e' maggiore, allora
- then
- echo $ret > /tmp/tmpContaLivelli #aggiorniamo il numero di livello raggiunto
- fi
- fi
- done
- #echo in `pwd` conta = $conta
- if test $3 = B
- then
- #echo siamo passati alla fase $3
- if test $4 -eq $conta #se nella seconda fase sono in una directory che corrisponde al livello cercato, dobbiamo stampare le info richieste
- then
- echo Adesso visualizzo il contenuto del direttorio `pwd` che fa parte del livello $4
- ls -l #se dovessimo visualizzare tutte le info inclusi i file nascosti sarebbe ls -la oppure inclusi i file nascosci a parte . e .. sarebbe ls -lA
- fi
- fi
- exit $conta
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement