Strumenti Utente

Strumenti Sito


lcs:lcs07:esercitazioni:esercitazione3

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
lcs:lcs07:esercitazioni:esercitazione3 [26/02/2007 alle 15:19 (19 anni fa)] – creata Susanna Pelagattilcs:lcs07:esercitazioni:esercitazione3 [23/03/2007 alle 12:56 (19 anni fa)] (versione attuale) Susanna Pelagatti
Linea 63: Linea 63:
  
 Chi riesce a farlo in meno linee di codice? Chi riesce a farlo in meno linee di codice?
 +
 +===== Esercizio 5: opzioni : mykeyselect =====
 +Scrivere uno script 
 +<code>
 +mykeyselect  [-a][-b barg][-c carg] file
 +</code>
 +//file// contiene su ogni riga delle coppie 
 +<code>
 +chiave valore
 +</code>
 +dove ''valore'' e' un valore numerico. Lo script stampa la lista ordinata delle N chiavi di minor valore nel file. ''N'' e' pari a 4 se l'opzione ''-b'' non e' specificata altrimenti ''N=barg''. Se ''-a'' e' specificata si stampano le chiavi di maggior valore e non quelle di monor valore. Se e' specificata l'opzione ''-c'', vengono ignorate tutte le righe che contengono ''carg''.\\
 +
 +Le gestione delle opzioni deve avere le seguenti proprieta':
 +  * le opzioni possono essere fornite in un qualsiasi ordine ma sempre prima del nome del file (es:
 +<code>
 +mykeyselect -b 20 -a filename
 +mykeyselect -c -a -b 30 filename
 +</code>
 +  * e' possibile specificare opzioni multiple con un singolo 'dash' (in questo caso solo l'ultima puo' avere un argomento opzionale). es:
 +<code>
 +mykeyselect -ac gigi
 +</code>
 +  * e' possibile omettere lo spazio fra opzione ed argomento es:
 +<code>
 +mykeyselect -b20 -a filename
 +mykeyselect -cgigi -a -b 30 filename
 +mykeyselect -acgigi filename
 +</code>
 +
 +
 +//Suggerimenti: Utilizzare sort per effettare il sorting, in particolare verificare sul man le opzioni -n e -k. Utilizzare i builtin **shift** e **getopts** per effettuare il persing della linea di comando. Essendo builtin le informazioni in linea si possono accedere da **man bash**. Una spiegazione piu' accurata del funzionamento di getopts (con esempi) e' disponibile in linea [[http://www.mkssoftware.com/docs/man1/getopts.1.asp|qua]] oppure [[http://uw713doc.sco.com/en/man/html.1/getopts.1.html|qua]].//
 +
 +===== Esercizio 6: interi : totdu =====
 +Sviluppare uno script:
 +<code>
 +totdu [<dir1> ... <dirN>]
 +</code>
 +che per ogni argomento che sia una directory stampa lo spazio utilizzato dalla directory e da tutte le sue sottodirectory, in byte e Kbyte (se >1KB) oppure in byte e Mbyte (se >1MB). 
 +Se non viene specificata alcuna directory si forniscono informazioni sulla directory corrente. Ad esempio:
 +<code>
 +bash:~$ totdu ciccio pippo
 +ciccio: Totale 18098176 byte 17 MB
 +pippo: Totale 14336 byte 14 KB
 +</code>
 +
 +//Suggerimenti: Utilizzare **du** per i byte occupati. Il comando **cut** puo' essere utile per selzionare un'opportuna colonna dell'output. Notare che nelle espressioni intere si puo' specificare un numero in base diversa da 10 con la notazione **base#numero** es: 16#400 per 1024.//
 +
 +===== Esercizio 7: self exec shell =====
 +Provare ad eseguire:
 +<code>
 +#!/bin/bash
 +# self-exec.sh
 +echo "This line appears ONCE in the script, yet it keeps echoing."
 +echo "The PID of this instance of the script is still $$."
 +#     The same shell always running
 +echo "==================== Hit Ctl-C to exit ===================="
 +sleep 1
 +
 +exec $0   
 +
 +echo "This line will never echo!"  # Why not?
 +
 +exit 0
 +</code>
 +che succede? perche?
 +
 +===== Esercizio 8: makecmd: a simple make =====
 +Implementare una funzione ''makecmd'' in grado di interpretare un singolo costrutto del tipo
 +<code>
 +target: source1 .. sourceN
 +       cmd1
 +       ....
 +       cmdK
 +</code>
 +fornito sullo standard input secondo la usuale semantica 'make' (la lista di comandi viene eseguita se il target non esiste oppure se e' stato modificato l'ultima volta in tempi precedenti rispetto ad almeno uno dei source nella dependency list, ogni comando viene prima stampato su stdout e poi eseguito). Se un source nella dependency list non esiste si considera la dipendenza verificata (!= semantica make).
 +Ad esempio:
 +<code>
 +bash:~$ more makefile
 +a : b c d
 +    echo "Sto eseguendo!"
 +bash:~$ makecmd < makefile
 +echo "Sto eseguendo!"
 +Sto eseguendo!
 +</code>
 +Utilizzare il builtin ''read'' per leggere dallo standard input, ed ''eval'' per invocare la esecuzione di un comando della lista. 
lcs/lcs07/esercitazioni/esercitazione3.1172503175.txt.gz · Ultima modifica: 27/06/2007 alle 12:16 (18 anni fa) (modifica esterna)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki