====== 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 //dir//che 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.