Strumenti Utente

Strumenti Sito


lcs:lcs06:esercitazioni:esercitazione2

Esercitazione 2

Esercizio 0 : getting started

Scrivere uno script bash gettingStarted che stampi il suo nome, il numero degli argomenti ed i primi tre argomenti (se esistono). Come

bash:~$ ./gettingStarted mio tuo suo
Script ./gettingStarted con 3 argomenti
Primo parametro mio
Scondo parametro tuo
Terzo parametro suo
Ciao Mondo
bash:~$ 

Esercizio 1: mycd

Scrivere una funzione Bash che implementa una versione personalizzata del builtin cd in cui prima viene eseguito il cambio di directory per mezzo del nomale builtin cd e poi viene eseguita una stampa formattata che ricorda la directory di partenza e quella di arrivo. Es:

bash:~$ mycd PROVA
mycd: successo! /home/s/susanna --> /home/s/susanna/PROVA
bash:~/PROVA$

Se il cambio della working directory non ha successo mycd stampa il normale messaggio di errore del builtin cd.

Esercizio 2: mypushd & mypopd

pushd e popd sono due builtin Bash che implementano uno stack di directory, Questo esercizio richiede di ri-implementarli tramite due funzioni:

  • mypushd dir che cambia la working directory in dir e la inserisce sullo stack di directory
  • mypopd che elimina la testa dello stack e si sposta nella nuova directory top

Esercizio 3: egunzip

Il comando gunzip solitamente si rifiuta di decomprimere file che non terminano per “.gz”. Realizzare una funzione egunzip che accetta file con qualsiasi suffisso, aggiunge al nome (se non c'e' gia') il suffisso “.gz” ed invoca il normale gunzip.

Esercizio 4: chsfx, change suffix

Realizzare uno script Bash che realizza un comando di sintassi:

chsfx [dir] old_suffix new_suffix 

che cambia il suffisso di tutti i file in dirche terminano per “old_suffix” in “new_suffix”. Se dir non e' specificata ridenomina i file nella directory corrente. Infine, chsfx stampa uno per linea tutti i file modificati con il formato

vecchio nome --> nuovo nome

Esercizio 5: mylsR -- recursive 'pretty' listing

Realizzare una funziona Bash (ricorsiva!) che stampa in modo formattato il contenuto di tutto il sottoalbero radicato nella directory corrente:

bash:~$ mylsR
 dir1 
   subdir11
     file111
     file112
   subdir12
     file121
   file11
 dir2
   file21
   file22
file1
file2
file3

in particolare il contenuto di ogni sottodirectory o file deve essere indentato di un TAB in piu' rispetto al padre.

Esercizio 6: checkAll -- uno script per automatizzare i test

Realizzare uno script Bash che prenda come argomento una directory e giri tutti i test contenuti nella directory confrontando l'output atteso (su stdout). Tutti i programmi di test terminano con il suffisso “.test” mentre l'output atteso termina con il suffisso “.check” ed ha la stessa radice. Ad esempio:

bash:~$ ls dir
primo.test primo.check zz.test zz.check

nella directory dir sono presenti due programmi di test, uno chiamato primo.test che sia spetta come risultato sullo standard output il contenuto del file primo.check ed un secondo test zz.test che si aspetta come output sullo stdout il contenuto di zz.check.

Lo script esegue tutti i test in ordine lessicografico, controlla che l'output sia quello atteso e stampa sullo standard error un messaggio per ogni test fornendo il nome del test effettuato e l'esito complessivo (OK, failed). Ad esempio:

bash:~$ checkAll dir
primo.test      OK
zz.test         failed

Includere opportuni controlli per verificare l'esistenza dei file, l'esito dei comandi etc.

lcs/lcs06/esercitazioni/esercitazione2.txt · Ultima modifica: 08/02/2007 alle 13:43 (17 anni fa) da Susanna Pelagatti