Strumenti Utente

Strumenti Sito


lcs:lcs07:esercitazioni:esercitazione3

Questa è una vecchia versione del documento!


Esercitazione 3

Esercizio 1: ridefiniamo 'cd'

Ridefinire il builtin cd usando una funzione cd in modo che con 0 o 1 parametri si comporti come il builtin cd mentre con 2 parametri, ad esempio:

cd old new

sostituisca tutte le occorrenze di old nella working directory corrente con new e poi cerchi di spostarsi nel path cosi' generato (se esiste ed e' una directory).

Gestire anche le situazioni di errore. Utilizzare il costrutto case per discriminare fra il numero dei parametri forniti alla funzione (vedi esempio nella lezione 3 su bash).

Esercizio 2: icd, interactive cd

Definire la funzione icd (interactive cd) in modo che elenchi le directory presenti nella directory corrente e chieda inrterattivamente all'utente in qualse vuole spostarsi. Ad esempio:

bash:~$ icd
1) pippo/
2) pluto/
3) paperone/
Quale scegli?
3
bash:~/paperone$

Si usi il costrutto select per interagire con l'utente settando opportunamente la variabile di prompt.

Avanzato: estendere icd in modo che accetti come parametro il path della directory in cui effettuare la scelta.

Esercizio 3: printpath

Definire la funzione printpath che stampa una per linea tutte le directory presenti nella variabile di ambiente PATH (separatore ':') una per linea. Ad esempio

 
bash:~$ printpath
/home/susanna/bin
/usr/local/bin
/usr/bin
/usr/X11R6/bin
/bin
/usr/games
/opt/gnome/bin
/opt/kde3/bin
/home/susanna/local/bin
.
bash:~$

Attenzione: il separatore ':' deve essere rimosso.

Esercizio 4: printusr

Definire una funzione printusr che stampi i nomi dei primi 10 utenti della macchina ordinati lessicograficamente (vedi file /etc/passwd) con la loro home. Ad esempio

bash:~$ printusr
at:/var/spool/atjobs
bin:/bin
daemon:/sbin
francy:/home/francy
ftp:/srv/ftp
games:/var/games
gdm:/var/lib/gdm
irc:/usr/lib/ircd
ldap:/var/lib/ldap
lp:/var/spool/lpd
bash:~$

Chi riesce a farlo in meno linee di codice?

Esercizio 5: opzioni : mykeyselect

Scrivere uno script

mykeyselect  [-a][-b barg][-c carg] file

file contiene su ogni riga delle coppie

chiave valore

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 (es:
mykeyselect -b 20 -a
mykeyselect -c gigi -a -b 30
  • e' possibile specificare opzioni multiple con un singolo 'dash'. es:
mykeyselect -ac gigi
  • e' possibile omettere lo spazio fra opzione ed argomento es:
mykeyselect -b20 -a
mykeyselect -cgigi -a -b 30
mykeyselect -acgigi

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.

lcs/lcs07/esercitazioni/esercitazione3.1173703136.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