Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- La parte in Shell deve prevedere un numero variabile di parametri N+1 (con N maggiore o uguale a 2):
- il primo parametro deve essere considerato un numero intero Y strettamente positivo, mentre gli altri N
- devono essere nomi assoluti di directory che identificano N gerarchie (G1, G2, …) all’interno del file
- system. Il comportamento atteso dal programma, dopo il controllo dei parametri, è organizzato in N fasi,
- una per ogni gerarchia.
- Il programma, per ognuna delle N fasi, deve esplorare la gerarchia Gi corrispondente - tramite un file
- comandi ricorsivo, FCR.sh - e deve contare globalmente tutti i file che saranno creati secondo quanto di
- seguito specificato. Il file comandi ricorsivo FCR.sh deve cercare in tutte le directory ogni file leggibile
- f
- 1 con lunghezza in linee maggiore o uguale Y; si dovrà quindi selezionare la singola linea numero 5 a
- partire dall’inizio del file che dovrà essere scritta in un file appositamente creato avente nome f.quinta;
- in caso, il file sia più corto e non sia possibile selezionare la linea sopra specificata bisogna creare un file
- vuoto di nome f.NOquinta. Al termine di tutte le N fasi, si deve riportare sullo standard output il numero
- totale di file creati globalmente. In seguito, per ogni file creato, si deve riportare sullo standard output il
- suo nome assoluto, e quindi il suo contenuto con opportune frasi che facciano capire all’utente che cosa
- si sta visualizzando.
- #!/bin/sh
- #Soluzione della Prima Prova in itinere del 11 Aprile 2018: turni 1 e 2
- #versione che usa un file temporaneo e usa FCR.sh per tutte le fasi
- case $# in
- 0|1|2) echo Errore: numero parametri is $# quindi pochi parametri. Usage is $0 Y dirass1 dirass2 ...
- exit 1;;
- *) echo OK: da qui in poi proseguiamo con $# parametri ;;
- esac
- #Controllo primo parametro sia un numero
- case $1 in
- *[!0-9]*) echo Errore: $1 non numero
- exit 2;;
- *) if test $1 -eq 0
- then
- echo $1 non diverso da 0
- exit 3
- fi;;
- esac
- Y=$1 #salviamo il primo parametro
- #quindi ora possiamo usare il comando shift
- shift
- #ora in $* abbiamo solo i nomi delle gerarchie e quindi possiamo fare i controlli sui nomi assoluti e sulle directory in un for
- for i
- do
- case $i in
- /*) if test ! -d $i -o ! -x $i
- then
- echo $i non directory
- exit 4
- fi;;
- *) echo $i non nome assoluto; exit 5;;
- esac
- done
- #controlli sui parametri finiti possiamo passare alle N fasi
- PATH=`pwd`:$PATH
- export PATH
- > /tmp/conta$$ #creiamo/azzeriamo il file temporaneo. NOTA BENE: SOLO 1 file temporaneo!
- for i
- do
- echo fase per $i
- #invochiamo il file comandi ricorsivo con la gerarchia, il nome relativo del file e il file temporaneo
- FCR12.sh $i $Y /tmp/conta$$
- done
- #terminate tutte le ricerche ricorsive cioe' le N fasi
- #N.B. Andiamo a contare le linee del file /tmp/conta$$
- files=`wc -l < /tmp/conta$$`
- echo Il numero di file totali che sono stati creati sono = $files
- for i in `cat /tmp/conta$$`
- do
- #Stampiamo (come richiesto dal testo) i nomi assoluti dei file creati
- echo Creato il file $i
- case $i in
- *NO*) echo il file originale non conteneva almeno 5 linee e quindi il file $i e\' vuoto ;;
- *) echo il contenuto del file $i e\' il seguente\:
- cat < $i ;;
- esac
- done
- #da ultimo eliminiamo il file temporaneo
- rm /tmp/conta$$
- -------------------------------------------------------------------------------------------------------------------------
- #!/bin/sh
- #FCR.sh
- #file comandi ricorsivo che scrive il nome dei file creati sul file temporaneo
- #il cui nome e' passato come terzo argomento
- NL= #variabile in cui salviamo il numero di linee del file corrente
- cd $1 #ci posizioniamo nella directory giusta
- for i in *
- do
- if test -f $i -a -r $i
- then
- NL=`wc -l < $i`
- if test $NL -ge $2
- then
- if test $NL -ge 5
- then
- head -5 $i | tail -1 > $i.quinta
- echo `pwd`/$i.quinta >> $3
- else
- > $i.NOquinta
- echo `pwd`/$i.NOquinta >> $3
- fi
- fi
- fi
- done
- for i in *
- do
- if test -d $i -a -x $i
- then
- #chiamata ricorsiva cui passiamo come primo parametro il nome assoluto del direttorio
- FCR12.sh `pwd`/$i $2 $3
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement