Esame 1 marzo 2006 Secondo compito Parte di Unix 1) eseguire le seguenti operazioni binario : 10000 + 111111 = 1001111 ottale : 777766 + 552433 = 1552421 esadecimale : efeffe + 10d1ca = 100c1c8 2) fare uno script che invii per mail a studente l'elenco dei files della directory corrente, che siano piu' piccoli di 4000 bytes e piu' grandi di 1000 bytes. #!/bin/csh touch elenco foreach file (*) set var = ( `ls -l $file` ) if ( 1000 < $var[5] && $var[5] < 4000 ) then echo $file >> elenco endif end mail studente < elenco Una soluzione piu' elegante (ma che implicava l'andare a leggere le opzioni disponibili per find nel manuale) di questo esercizio e' la seguente : #!/bin/csh touch elenco echo "ecco i files piu piccoli di 200 bytes :\n" >> elenco find . -size -4000c -size +1000c -maxdepth 1 >> elenco mail studente < elenco 3) fare uno script che esamini il tipo di mask di default definita correntemente per l'utente studente. Controllare se tale mask permette all' utente studente, di creare files che siano leggibili. Nel caso che lo permetta, modificare la mask di default in modo opportuno in modo da TOGLIERE tale possibilita'. [Suggerimento : ricordarsi della operazione 'modulo' tra interi e dell'effetto della divisione tra variabili intere nella shell tcsh] #!/bin/csh set var = `umask` @ a = $var / 100 if ( $a < 4 ) then @ var += 400 umask $var endif Parte di Perl 4) scrivere uno script che accetti come argomento il nome di una directory. Di tale directory faccia una lista SOLO dei files che sono LINKS SIMBOLICI. Accanto al nome di questi files venga anche scritto il file al QUALE PUNTANO. Fare uso per questo della funzione di Perl (e non solo di Perl) che e' readlink #!/usr/local/bin/perl chomp (@lista = <$ARGV[0]/*>); foreach (@lista) { if (-l $_) { $link = readlink $_ ; print "Il file simbolico $_ punta a $link\n"; } } 5) scrivere uno script che accetti in input il nome di un file (in forma assoluta) e, SE IL FILE E' VUOTO, scriva dentro quel file una riga di commento con la data di oggi (naturalmente SENZA SCRIVERE LA DATA ESPLICITAMENTE!!) #!/usr/local/bin/perl chomp($file = ); if ( -z $file ) { open OUT,">>$file"; $scritta = `date`; print OUT "Oggi $scritta"; close OUT ; };