• Non ci sono risultati.

if test ! -d $1 -o ! -x $1 then echo $1 non direttorio exit 1 fi

N/A
N/A
Protected

Academic year: 2021

Condividi "if test ! -d $1 -o ! -x $1 then echo $1 non direttorio exit 1 fi"

Copied!
3
0
0

Testo completo

(1)

#!/bin/sh

#Soluzione della Prima Prova in itinere del 12 Aprile 2013

#versione 1 che usa un file temporaneo e non usa FCR.sh per la seconda fase

case $# in

3) 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 stringa numero

exit 3;;

SOSTITUITO CON

0|1) echo Errore: numero parametri is $# quindi pochi parametri. Usage is $0 numero dirass1 dirass2 ...

exit 1;;

*) echo OK: da qui in poi proseguiamo con $# parametri ;;

esac

#in $* abbiamo solo i nomi delle gerarchie e quindi possiamo fare i controlli sui nomi assoluti e sui direttori in un for

for i do

case $i in

/*) if test ! -d $i -o ! -x $i then

echo $i non direttorio exit 2

fi;;

*) echo $i non nome assoluto; exit 3;;

esac done

PARTE ELIMINATA

#puo' avere senso controllare che il secondo parametro non contenga un carattere / ==> non segnato errore se non presente questo controllo

#mentre segnata una piccola penalizzazione se inserito questo controllo SENZA NESSUNA SPIEGAZIONE!

case $2 in

*/*) echo Errore: $f non in forma relativa semplice exit 3;;

*) ;;

esac

#Controllo terzo parametro expr $3 + 0 > /dev/null 2>&1 N1=$?

if test $N1 -ne 2 -a $N1 -ne 3

then echo numerico $3 #siamo sicuri che numerico if test $3 -le 0

then echo $3 non positivo exit 4

fi else

echo $3 non numerico exit 5

fi

PATH=`pwd`:$PATH export PATH

(2)

AL POSTO DI DUE FASI NE ABBIAMO N

QUINDI QUESTO PEZZO INSERITO IN UN CICLO FOR CON UNA VARIABILE CHE CONTA

#Iniziamo la prima fase

#creiamo un file conta$$ il cui nome viene passato come argomento

> /tmp/conta$$

echo fase A

#invochiamo il file comandi ricorsivo con solo i primi due parametri (il terzo non serve) e con il nome del file temporaneo

FCR.sh $1 $2 /tmp/conta$$

n=1 #serve per dare un nome diverso ai file temporanei e volendo per dire in che fase siamo

for i do

> /tmp/conta$$-$n #creaimo/azzeriamo il file temporaneo echo fase $n

#invochiamo il file comandi ricorsivo con la gerarchia, il carattere iniziale delle linee e il file temporaneo

FCR.sh $i /tmp/conta$$-$n n=`expr $n + 1`

done

DI NUOVO QUESTO PEZZO INSERITO IN UN CICLO FOR CON UNA VARIABILE CHE CONTA

#N.B. Andiamo a contare le linee del file /tmp/conta$$

D=`wc -l < /tmp/conta$$`

echo Il numero di direttori totali della gerarchia che soddisfano la specifica =

$D

#terminate tutte le ricerche ricorsive cioè le N fasi

n=1 #serve per dare un nome diverso ai file temporanei e volendo per dire in che fase siamo

for i do

#N.B. Andiamo a contare le linee del file /tmp/conta$$-$n F=`wc -l < /tmp/conta$$-$n`

echo Il numero di file totali della gerarchia $i che soddisfano la specifica = $F

INVECE CHE SEMPLICEMENTE STAMPARE I NOMI BISOGNA FARE UN FOR PER TUTTI I NOMI

#Stampiamo (come richiesto dal testo) i loro nomi assoluti cat /tmp/conta$$

for j in `cat /tmp/conta$$-$n`

do

#Stampiamo (come richiesto dal testo) i nomi assoluti dei file trovati

echo Trovato il file $j PARTE TOLTA

#Controlliamo se dobbiamo passare alla seconda fase if test $D -gt $3

then

#Passiamo ora alla seconda fase che non viene risolta in questo caso con il file ricorsivo FCR.sh, ma direttamente in questo file comandi

#chiediamo all'utente il numero X

echo -n "Dammi il numero X che deve essere compreso fra 1 e $3: "

read X

#Controllo X

expr $X + 0 > /dev/null 2>&1 N1=$?

if test $N1 -ne 2 -a $N1 -ne 3

then echo numerico $X #siamo sicuri che numerico if test $X -lt 1 -o $X -gt $3

then echo $X non compreso

(3)

exit 6 fi

else

echo $X non numerico exit 7

fi

PARTE MODIFICATA echo fase B

#selezioniamo direttamente il nome del direttorio richiesto d=`head -$X < /tmp/conta$$ | tail -1`

echo direttorio selezionato $d cd $d

for i in * do

if test -f $i -a -r $i then

case $i in

*.$2) #stampiamo nome assoluto

echo Nome assoluto file `pwd`/$i #stampiamo prima linea del file

head -1 < $i;;

*) ;;

esac fi done fi

#selezioniamo direttamente le prime $x linee del file corrente head -$X < $j

done

#da ultimo eliminiamo il file temporaneo MODIFICATO

rm /tmp/conta$$

IN

rm /tmp/conta$$-$n n=`expr $n + 1`

done

Riferimenti

Documenti correlati

Questa funzione deve anche costruire un nuovo file numeri_bis.txt che contiene gli stessi elementi di numeri.txt con l’eccezione di tutte le occorrenze del massimo e

Si scriva una funzione ordina() che crea un nuovo file chiamato num_org.dat che contenga gli stessi numeri del file numeri.dat ma ordinati in senso decrescente.. La

Sia dato un file città.dat contenente, in ogni riga, una stringa di lunghezza massima 36 caratteri che contiene il nome di una città e un valore intero che ne rappresenta il numero

Scrivere una funzione elimina(l) che riceve in ingresso la lista l e la modifica eliminando tutti gli elementi che hanno il campo informativo uguale a quello

[r]

(American Mathematical Monthly, Vol.118, January 2011). Proposed by Kieren MacMillan (Canada) and Jonathan

(American Mathematical Monthly, Vol.110, April 2003) Proposed by Western Maryland College Problems Group (USA).. Let denote Eulerian numbers, and let  denote Stirling numbers

Si pu` o anche dire che il rango della matrice `e il massimo numero di righe o colonne linearmente indipendenti, o anche il massimo ordine dei minori non nulli della matrice