From 4fe62cbfe8d490efec9d48c89518482d1b75a60f Mon Sep 17 00:00:00 2001 From: jriou Date: Mon, 9 Dec 2002 18:55:04 +0000 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20corrig=C3=A9s=20de=20presque=20to?= =?UTF-8?q?us=20les=20exercies=20syst=C3=A8me=20(il=20en=20reste=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unix/exercices/solutions/systeme-sol.tml | 147 ++++++++++++++++++++--- unix/exercices/systeme.tml | 4 +- 2 files changed, 133 insertions(+), 18 deletions(-) diff --git a/unix/exercices/solutions/systeme-sol.tml b/unix/exercices/solutions/systeme-sol.tml index d59b4a8..a83a16b 100644 --- a/unix/exercices/solutions/systeme-sol.tml +++ b/unix/exercices/solutions/systeme-sol.tml @@ -334,9 +334,17 @@ crochets par leur valeur; par exemple
-chaland ~ $params bla ble bli blo blu  
+chaland ~ $ params bla ble bli blo blu  
 La commande params a 5 paramètre(s), que voici : bla ble bli blo blu
-
+ + +
+#!/bin/sh
+echo "La commande $0 a $# paramètre(s), que voici| : $@"
+
+ + + @@ -345,7 +353,13 @@ La commande params a 5 param Créez une commande qui, lorsqu'elle est appelée, renvoie le nombre d'arguments qui lui ont été fournis, ainsi que le premier de ces -arguments. +arguments. +
+#!/bin/sh
+echo "J'ai reçu $# arguments"
+echo "Le premier d'iceux est $1"
+
+
  • @@ -357,19 +371,46 @@ sur une machine donn drakkar ~ $ combien galion Il y a 5 personne(s) loguées sur galion en ce moment. drakkar ~ $ -
  • + + +
    +#!/bin/sh
    +N=`who | wc -l | sed -e "s/ *//"`
    +MACHINE=`whoami`
    +echo "Il y a $N personne(s) logués sur $MACHINE en ce moment"
    +
    +
  • On veut remplacer le suffixe .htm d'un ensemble de fichiers en -.html.
  • +.html.
    +

    +Le script suivant lancé avec "**/*.htm" comme paramètre devrait +fonctionner : +

    +
    +#!/bin/sh
    +for i in $@;
    +do
    +mv $i `echo $i | sed -e "s/htm$/html/"`
    +done;
    +
    + -
  • - Un ensemble de -noms de fichiers sont en majuscules. On veut tout basculer en minuscules.
  • +
  • Un ensemble de noms de fichiers sont en + majuscules. On veut tout basculer en minuscules. +
    +#!/bin/sh
    +for i in $@;
    +do
    +mv $i `echo $i | tr '[:upper:]' '[:lower:]'`
    +done;
    +
    +
  • @@ -383,7 +424,21 @@ indice toto tata titi toto tutu

    renvoie l'indice de toto dans la liste tata titi toto -tutu, c'est-à-dire 3.

    +tutu, c'est-à-dire 3.

    + +
    +#!/bin/sh
    +ARG=$1
    +shift
    +N=0
    +
    +for i in $@;
    +do
    +N=`expr $N + 1`
    +[ x$ARG = x$i ] && echo $N
    +done;
    +
    +
  • @@ -400,6 +455,22 @@ Dans ce fichier, vous avez 12 contiennent deux de ces lettres au moins. Il y a aussi 10 mots ne contenant aucune voyelle. + +
    +#!/bin/sh
    +
    +RST=`grep "[rst]" $1 | wc -l`
    +DEUX=`grep "[rst].*[rst]" $1 | wc -l`
    +CONS=`grep -v "[aeiou]" $1 | wc -l`
    +
    +(echo "Dans ce fichier, vous avez| :";
    +echo "$RST mots contenant «r», «s» ou «t» et parmi eux,";
    +echo "$DEUX contiennent deux de ces lettres au moins.";
    +echo "Il y a aussi $CONS mots ne contenant aucune voyelle.") |
    +sed -e "2,3s/^ *//
    +\$s/i */i /"
    +
    +
  • @@ -411,15 +482,49 @@ feu) dans la premi

    On veut aussi que le résultat soit placé dans un fichier, et que le résultat soit classé : toutes les lignes qui contiennent «air», puis toutes celles qui -contiennent «eau», etc.

    +contiennent «eau», etc.

    +
    +#!/bin/sh
    +
    +FICHIER=resultat
    +MOTS="terre air eau feu"
    +
    +[ -w $FICHIER ] && echo "Le fichier $FICHIER existe déjà" && exit 1
    +
    +for i in $MOTS;
    +do
    +echo "Lignes contenant $i" >> $FICHIER
    +grep $i zola*.txt >> $FICHIER
    +echo >> $FICHIER 
    +done;
    +
    +
    +
  • -Chercher le mot «mine» dans les chapitres 3, 4 et 5 de la première partie de -Germinal, et obtenir un fichier dans lequel figure le nombre -d'occurences du mot dans les fichiers, avec le numéro des lignes.
  • +Chercher le mot «mine» dans les chapitres 3, 4 et 5 de la première partie +de Germinal, et obtenir un fichier dans lequel figure le nombre +d'occurences du mot dans les fichiers, avec le numéro des +lignes.
    + +
    +#!/bin/sh
    +
    +FICHIER=resultat
    +
    +[ -w $FICHIER ] && echo "Le fichier $FICHIER existe déjà" && exit 1
    +
    +for i in zola[345].txt; 
    +do
    +echo "Dans le fichier $i, voici les lignes contenant «mine»" >> $FICHIER
    +NB=`grep -n mine $i | tee -a $FICHIER | wc -l` 
    +(echo "$NB lignes";echo ) >> $FICHIER
    +done;
    +
    + @@ -436,7 +541,18 @@ coupe fic 4 8

    affichera les lignes 4 à 8 du fichier fic. Affichez des messages en cas d'erreur (nombre de paramètres incorrect, fichier inexistant, etc). -

    +

    + +
    +#!/bin/sh
    +
    +[ $# != "3" ] && echo "Nombre de paramètres incorrects" && exit 1
    +[ ! -r $1 ] && echo "Fichier $1 inexistant" && exit 1
    +
    +cat $1 | sed -n -e "$2,$3p"
    +
    +
    + @@ -463,7 +579,6 @@ Note pour reconstruire l'arborescence, on utilise tar zxvf fichier.

    -
  • La commande suivante affiche le path complet de tous les fichiers finissant @@ -492,7 +607,7 @@ d
  • -Écrire un sript permettant d'appliquer divers filtres sur un fichier. Ce +Écrire un script permettant d'appliquer divers filtres sur un fichier. Ce script est lancé avec un argument, qui doit être un nom de fichier appelé fichier de travail; dans le cas contraire, on afficher un message d'erreur. On attend ensuite une commande en mode interactif, qui peut diff --git a/unix/exercices/systeme.tml b/unix/exercices/systeme.tml index 8483a8a..594109c 100644 --- a/unix/exercices/systeme.tml +++ b/unix/exercices/systeme.tml @@ -191,7 +191,7 @@ crochets par leur valeur; par exemple
    -chaland ~ $params bla ble bli blo blu  
    +chaland ~ $ params bla ble bli blo blu  
     La commande params a 5 paramètre(s), que voici : bla ble bli blo blu
     
  • @@ -349,7 +349,7 @@ d
  • &icone.solution; -Écrire un sript permettant d'appliquer divers filtres sur un fichier. Ce +Écrire un script permettant d'appliquer divers filtres sur un fichier. Ce script est lancé avec un argument, qui doit être un nom de fichier appelé fichier de travail; dans le cas contraire, on afficher un message d'erreur. On attend ensuite une commande en mode interactif, qui peut être :