====== Esercitazione 6 ====== ===== Esercizio 1 ===== Completare le parti mancanti (sia codice che commento) del seguente script bash: .... # 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 ===== Scrivere uno script bash che prende "k>=2" nomi di file di ingresso e appende i primi "k-1" files nel file passato come ultimo argomento (k-esimo), scrivendo i file in ingresso nell'ordine da destra a sinistra (es. myscript.sh fileA fileB fileC -- fileC conterra' in sequenza prima fileB e poi fileA).\\ SUGGERIMENTO: creare un array contenente tutti gli argomenti passati allo script. ===== Esercizio 3 ===== Scrivere uno script bash che dati 2 file di testo in input (f1 ed f2) produce il seguente menu di scelta per l'utente:\\ 1. rimuovere i file "f1" ed "f2"\\ 2. archiviare i file "f1" ed "f2"\\ 3. appendere il file "f1" al file "f2"\\ 4. esci\\ Implementare le 3 opzioni e testare tutti i casi. Per l'opzione 1 chiedere conferma prima della rimozione dei file; per l'opzione 2 utilizzare i comandi ''tar'' e ''gzip'' in pipeline e produrre l'archivio compresso "f1f2.tar.gz". **Non** utilizzare il builtin ''select'' per implementare il menu. ===== Esercizio 4 ===== Dati i file testuali contenuti in {{informatica:sol:laboratorio20:esercitazionib:results.tgz | 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).