====== 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?