Sei sulla pagina 1di 2

Elaborato 1: Utilizzo della shell e sua programmazione.

Consegna entro: 26/04/2013.

Testo dellelaborato
Si vuole realizzare uno script bash che consenta un semplice versionamento di copie di backup di file di testo. se!uendo lo script" apparira# il se!uente menu# interattivo: 1. init$repo 2. commit 3. remove 4. revert %. status 6. file&search 'l comportamento per ciascuna voce del menu deve essere il se!uente. 'l comando init-repo prende un parametro repo" e crea nella director( corrente due sotto$director( chiamate: )repo> e ).repo.bck>. Quest#ultima risultera# *uindi nascosta" a causa del punto all#inizio del nome. +a director( )repo> sara# usata per modificare i file" mentre *uella nascosta ,).repo.bck>- sara# usata per il backup dei file. sempio: se come parametro repo sara# passato my_program" verranno create le se!uenti director(: my_program .my_program.bck

'l comando commit funziona come se!ue. .ato in input il nome di un repo ,)repo/-" per ogni file <filename> contenuto in )repo/ o in una sotto$director( di )repo/" si confronta il file corrispondente presente in ).repo.bck/ con lo stesso path relativo a partire da ) repo/. Se tale file non esiste" si provvede a crearlo copiando ) filename/ da )repo/ o una sua sotto$director(" avendo cura di preservare la stessa struttura di sotto$director( a partire da ) repo/ anche in ).repo.bck/. Se invece tale file esiste" si procede come se!ue: Se il contenuto del file e# stato modificato rispetto alla copia presente in ).repo.bck/" allora il file modificato verra# copiato in ).repo.bck//)filename/. 0ltrimenti" poiche# il contenuto del file non e# stato modificato" non e# necessario salvare un#ulteriore copia.

sempio: supponiamo che la director( my_program conten!a la director( src" con dentro un file chiamato pippo.c. 0llora: 1. +a prima volta che si da# il comando commit" dentro .my_program.bck/ viene creata la

director( src" e dentro src viene copiato il file pippo.c. 2. Se poi riese!uo immediatamente il comando commit" allora lo script non fara# nulla" perche# la copia di pippo.c in .my_program.bck/src e# !ia# u!uale alla versione in my_program/src. 3. Se invece modifico il contenuto del file pippo.c" e poi riese!uo il comando commit" allora il file my_program/src/pippo.c sara# copiato in .my_program.bck/src. 'l comando remove prende come parametro un file presente in )repo/" e lo rimuove sia dalla cartella )repo/ che dalla cartella ).repo.bck/. 'l comando revert prende )repo/ e un nome di file come parametro opzionale. Se tale parametro e# presente" la copia di backup del file passato come parametro deve essere ripristinata da ).repo.bck/ in )repo/. 'n altre parole" il file passato come parametro verra# copiato dalla cartella ).repo.bck/ alla cartella )repo/. Se invece non viene fornito alcun parametro" allora verranno ripristinate tutte le copie di backup. 1uesto si!nifica che o!ni file contenuto nella director( )repo/ o in una sotto$ director( di )repo/ verra# ripristinata utilizzando la copia presente in ).repo.bck/. 'l comando status, dato )repo/" stampa a video il nome di tutti i file in ) repo/ o in una sua sotto$ director( il cui contenuto e# diverso dalla copia di backup presente in ).repo.bck/. 'nfine il comando file_search prende come parametro una strin!a di testo pattern. 2ale strin!a verra# ricercata all#interno di tutti i file presenti nella director( )repo/ o in una sotto$director( di )repo/. +#output prodotto dal comando sara# una lista ordinata di tutti i file che conten!ono pattern all#interno del loro contenuto. 3el caso in cui un file conten!a piu# occorrenze di pattern" *uesto apparira# nella lista solo una volta. ' file devono essere indicati con il loro path relativo rispetto alla director( )repo/. +#ordine della lista e# il tradizionale ordine alfanumerico. sempio: supponiamo che il pattern 4ricerca5 sia presente all#interno dei file leggimi.txt e varie/pippo.txt nella director( )repo/" l#output dovra# essere il se!uente: ./leggimi.txt ./varie/pippo.txt

FAQ
1. ! possibile inserire il co"ice su script separati, oppure bisogna usare le fun#ioni$ 1uesta decisione 6 lasciata allo studente" che pu7 sce!liere il modo pi8 opportuno. 9 *uindi possibile sviluppare il pro!ramma inserendo il codice su funzioni oppure su file separati. 2. ! possibile usare il coman"o comm/sed/a%k/etc.$ S:. 1ualsiasi comando bash 6 consentito" anche se non spie!ato a lezione. +o studente e# pero# tenuto a conoscere i comandi che usa nel codice. 3on 6 lecito usare script in altri lin!ua!!i" *uali ad esempio ;erl o 2<+. 3.=.: 2utto *uanto non esplicitato in *uesto documento pu7 essere implementato liberamente.