Corrige CM3 DOSI/SE * Que fait la commande head -10 f1 | tail -1 (f1 est un fichier texte) extrait la 10eme ligne d'un fichier * Construire un programme C-shell permettant d'afficher a l'écran la ieme ligne d'un fichier f passé en paramètre (ligne i f). #!/bin/csh head -$1 $2 | tail -1 * Calcul de la taille globale d'une liste de fichiers passés en argument au script #!/bin/csh set som = 0 foreach fic ( $* ) set info = ( `ls -ld $fic` ) @ som += $info[5] end echo "total : $som" * Calculer l'espace disque utilisé par chaque utilisateur (les homedir sont dans le répertoire courant) Quel est l'espace total utilise ? Quel est l'utilisateur consommant le plus d'espace ? set maxus = 0 set som = 0 foreach hdir ( * ) us = `du -s $hdir | cut -f 1` @ som += $us echo $hdir : $us if ( $us > $maxus ) then @ maxus = $us set maxhdir = $hdir endif end echo total $som maxi : $maxhdir $maxus echo possible avec cut -c * Attribuer un numéroa chaque etudiant d'une liste set n = 0 foreach etu (`cat liste`) echo $n $etu @ n++ end * Lire une suite de nombres tant que leur somme ne depasse pas 100 set som = 0 while ( $som < 100 ) @ som += $< end echo total $som * Calculer le nombre de fichiers et repertoires d'une arborescence # ~/compte.csh set nb = 0 foreach fic ( * ) @ nb++ if ( -d $fic ) then cd $fic @ nb += `~/compte.csh` cd .. endif end echo $nb * AWK * Afficher toutes les lignes contenant {\tt srb}. awk 'srb' * Afficher le 3eme champ de chaque ligne. awk 'print $3' * Dans le fichier /etc/passwd afficher les login des utilisateurs dont l'UID est inférieu a 100 awk '$3<100 { print $1; }' * Dans le fichier /etc/passwd afficher les login des utilisateurs dont le descriptif contient licence}. awk '$4~/licence/ { print $1; }' * Afficher le nombre de lignes d'un fichier awk 'END { print NR ; }' * Afficher le nombre d'utilisateurs de {\tt bash} et de {\tt csh} \`a partir des informations du fichier /etc/passwd $7 == "/bin/csh" { nc = nc + 1; } $7 == "/bin/bash" { nb = nb + 1; } END { print nc, nb } * Afficher le pourcentage d'utilisateurs des diff'erents shells { shells[$7]++; } END { for ( sh in shells ) { printf("shell:%s %2.2f\%\n", sh, 100*shells[sh]/NR); } } * Afficher le login et le num'ero de ligne des comptes en anomalie. En donner 'egalement le nombre. ($3 <= 1000) && ($7 != "/sbin/nologin") && ($7 != "/bin/false") { print $0; nb++; } { print nb; } * Faire la somme des nombres stock'es dans un fichier et s'epar'es par des blancs { for (i=01; i<=NF; i++) s+= $i; } END { print s; }