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