Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio21:esercitazionib:esercitazione12

Esercitazione 12

Esercizio 1

Completare le parti mancanti (sia codice che commento) del seguente script bash script.sh, che archivia e comprime tutti i contenuti della cartella specificata come parametro

....                      # shell da usare per l’interpretazione dello script

if [ $# -ne 1 ]; then                        # (commenta il codice) ........
    echo usa: $(basename $0) nomedirectory   # .........
    exit -1
fi
dir=$1
if [ ! -d $dir ]; then                       # (commenta il codice) .........
    echo "L'argomento $dir non e' una directory"   
    exit 1;   
fi

bdir=$(basename $dir)
if [ -w ....... ]; then                     # il file esiste ed e scrivibile
    echo -n "il file $bdir.tar.gz esiste gia', sovrascriverlo (S/N)?"
    read yn                                 # (commenta il codice) .........
    if [ x$yn != x"S" ]; then               # ..............
          exit 0;
    fi
    rm -f $bdir.tar.gz
fi
echo "creo l'archivio con nome $bdir.tar.gz"

tar cf $bdir.tar $dir ...............       # appende l’output sullo std-error nel file error.txt   
if [ ...... ]; then                         # controlla che il comando sia andato a buon fine
    echo "Errore nella creazione dell'archivio"
    exit 1
fi
gzip $bdir.tar  ..........                  # appende l’output sullo std-error nel file error.txt
if [ ...... ]; then                         # controlla che il comando sia andato a buon fine
    echo
    echo "Errore nella compressione dell'archivio"
    exit 1
fi

echo "archivio creato con successo, il contenuto dell’archivio e':"
tar tzvf $bdir.tar.gz   .........           # redirige lo std-error sullo std-output
exit 0

Esercizio 2

Utilizzando il comando find, stampare la lista di tutti i nomi di file contenuti nella propria home (o in una directory creata appositamente per fare il test) che sono stati modificati negli ultimi 'X' minuti e che contengono al loro interno la parola 'Y' (X è un numero intero Y è una stringa, es. X=2 Y=ciao). Usare il comando find, ricordando che: per cercare solo file regolari l'opzione e' '-type f', per selezionare i file modificati entro 'X' minuti l'opzione da usare è '-mmin' (leggere attentamente l'entry nel manuale man 1 find). Per cercare una parola all'interno di un file usare il comando grep, l'opzione '-l' di grep permette di stampare il nome del file che ha dato il match.

NOTA: si può aggiornare il tempo di modifica di un file tramite il comando touch

Esercizio 3

Dati i file testuali contenuti in questo tarball, ognuno dei quali contiene per ogni riga due campi separati da spazio ('id valore'). Scrivere uno script bash che legge il campo 'valore' di ogni file e ne calcola media e deviazione standard, quindi stampa sullo standard output una stringa con il seguente formato:
[nomedelfile senza estensione] [numero di linee del file] [media] [deviazione standard]. Un esempio di output per i due file test1.dat e test2.dat è:
test1 5 20.18 1.25
test2 3 11.20 .81
NOTA: per effettuare i calcoli in floating point usare il comando bc (esempio: echo “scale=2; sqrt(12)” | bc -q“ stampa 3.46, cioe' la radice quadrata di 12 con troncamento a 2 cifre dopo la virgola).

Esercizio 4

Dati i file testuali dell'esercizio precedente, scrivere uno script bash che legge i file testuali dell'esercizio precedente (specificando come argomento la cartella che li contiene), prende solo la parte intera dei valori, e scriva un file (il cui nome viene specificato come secondo argomento) che contiene i numeri in ordine crescente e senza duplicati.

Il contenuto atteso del file prodotto è

0
1
10
11
18
19
20
21
1229
1231
1234
1237

(suggerimento: è possibile creare un file di appoggio in cui inserire i valori non ordinati. Si consiglia di guardare attentamente le opzioni dei comnandi sort e cut, e si può inserire il comando tr -s ” “ nella pipeline per comprimere gli spazi duplicati.)

Esercizio 5

Per questo esercizio utilizzare il sistema client-server dove il server trasforma le stringhe in upper case (ad es Esercitazione 9, esercizio 2), modificando il client in modo che prenda la parola (o più parole) come argomento del main, e stampi sullo standard output solamente il risultato (e.g., il comando ./client_toupper ciao stampa CIAO su stdout e termina).

Realizzare uno script bash che prende come argomento un file di testo in formato 'X.txt' (ad es, questo) e compie le seguenti operazioni:

  • invoca il makefile appropriato per assicurarsi che il client e server siano aggiornati
  • avvia il server (in background!)
  • per ogni parola nel file 'X.txt' avvia un'istanza del client (sempre in background) che capitalizza la parola, raccogliendo l'output di tutti i client nel file 'X-capital.txt'
  • una volta finito, termina il server (si possono utilizzare i comandi kill e pidof)

Data la natura asincrona e parallela del sistema non è importante l'ordine o la formattazione delle parole nel file di output. Se il client permette di ricevere più parole, è anche possibile passare un'intera riga all'istanza.

informatica/sol/laboratorio21/esercitazionib/esercitazione12.txt · Ultima modifica: 21/05/2021 alle 06:34 (3 anni fa) da Alessio Conte