Esame 2 luglio 2004, soluzione Parte di Unix 1) eseguire le seguenti operazioni binario : 11001101 + 101010 = 11110111 ottale : 345 x 24 = 10744 esadecimale : e730 + f0ca = 1D7FA 2) scrivere un comando o uno script che analizzi SOLO gli ultimi 100 comandi impartiti e conti quante volte e' stato impartito il comando ls e quante volte e' stato impartito il comando echo Si mandi quindi un mail a studente con queste informazioni. #!/bin/tcsh history | tail -100 > comandi.lis set nls = ( `grep ls comandi.lis | wc` ) set necho = ( `grep echo comandi.lis | wc` ) echo Il comando ls e\' stato impartito $nls[1] volte negli ultimi 100 comandi | mail studente echo Il comando echo e\' stato impartito $necho[1] volte negli ultimi 100 comandi | mail studente 3) mediante l'uso del comando pushd e simili, si scriva uno script che accetti inline il nome di una directory e di tale directory faccia la lista dei soli files che sono symbolic links e di quelli che sono sottodirectories. Questa lista deve essere stampata a terminale ed anche nel file pincopallino.lis #!/bin/tcsh pushd $1 ls -l | grep ^l > pincopallino.lis ls -l | grep ^d >> pincopallino.lis cat pincopallino.lis 4) scrivere uno script che metta in ordine antialfabetico i nomi di files contenuti nel file pincopallino.lis dell'esercizio precedente. #!/bin/tcsh # il seguente comando e' per far si' che, se gia' non lo e', le linee contenute # in pincopallino.lis siano ordinate ALFABETICAMENTE (considerando i # nomi di files) sort -k 9 pincopallino.lis > pinco # la maniera piu' veloce e' ora quella di usare il comando tac altrimenti ... set nlinee = ( `wc pinco` ) @ i = 1 while ( $i <= $nlinee[1] ) tail -$i pinco | head -1 @ i++ end Parte di Perl 5) scrivere uno script che legga un numero e poi una lista di stringhe (tutte su linee separate) e poi stampi a terminale la linea indicata dal numero. #!/usr/bin/perl print "inserire il numero :\n"; chomp( $numero = ) ; print "inserire le linee di testo\n"; chomp(@stringhe=); print "riga n. $numero : $lista[$numero-1]"; 6) scrivere uno script che accetti in input un numero intero, e di esso scriva in output se e' primo oppure no ( si tenga presente che in perl esiste il vettore $ARGV - il cui primo elemento e' l'elemento 0 ! - che ha identico significato a quello di tcsh shell, cosi' come esiste l'operatore % che fa il modulo tra due numeri interi). #!/usr/bin/perl $numero = $ARGV[0] ; for ( $i=2 ; $i<= $numero/2 ; $i++) { if( $numero % $i == 0 ) { print "il numero $numero non e\' primo\n"; exit ; }; } print "il numero $numero e\' primo\n";