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
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.
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.
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).