Ajout des corrigés de presque tous les exercies système (il en reste 3)

This commit is contained in:
jriou 2002-12-09 18:55:04 +00:00
parent e0d48b0917
commit 4fe62cbfe8
2 changed files with 133 additions and 18 deletions

View file

@ -334,9 +334,17 @@ crochets par leur valeur; par exemple
<pre>
<span class="prompt">chaland ~ $</span>params bla ble bli blo blu
<span class="prompt">chaland ~ $</span> params bla ble bli blo blu
La commande params a 5 paramètre(s), que voici : bla ble bli blo blu
</pre></li>
</pre>
<pre>
#!/bin/sh
echo "La commande $0 a $# paramètre(s), que voici| : $@"
</pre>
</li>
@ -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.</a></strong></li>
arguments.</a></strong>
<pre>
#!/bin/sh
echo "J'ai reçu $# arguments"
echo "Le premier d'iceux est $1"
</pre>
</li>
<li><strong> <a name="shell6">
@ -357,19 +371,46 @@ sur une machine donn
<span class="prompt">drakkar ~ $</span> combien galion
Il y a 5 personne(s) loguées sur galion en ce moment.
<span class="prompt">drakkar ~ $</span>
</pre></li>
</pre>
<pre>
#!/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"
</pre>
</li>
<li><strong> <a name="shell7">
On veut remplacer
le suffixe <tt>.htm</tt> d'un ensemble de fichiers en
<tt>.html</tt>.</a></strong></li>
<tt>.html</tt>.</a></strong>
<p>
Le script suivant lancé avec "**/*.htm" comme paramètre devrait
fonctionner :
</p>
<pre>
#!/bin/sh
for i in $@;
do
mv $i `echo $i | sed -e "s/htm$/html/"`
done;
</pre>
</li>
<li><strong> <a name="shell8">
Un ensemble de
noms de fichiers sont en majuscules. On veut tout basculer en minuscules.</a></strong></li>
<li><strong> <a name="shell8"> Un ensemble de noms de fichiers sont en
majuscules. On veut tout basculer en minuscules.</a></strong>
<pre>
#!/bin/sh
for i in $@;
do
mv $i `echo $i | tr '[:upper:]' '[:lower:]'`
done;
</pre>
</li>
@ -383,7 +424,21 @@ indice toto tata titi toto tutu
<p>
renvoie l'indice de <tt>toto</tt> dans la liste <tt>tata titi toto
tutu</tt>, c'est-à-dire 3.</p></li>
tutu</tt>, c'est-à-dire 3.</p>
<pre>
#!/bin/sh
ARG=$1
shift
N=0
for i in $@;
do
N=`expr $N + 1`
[ x$ARG = x$i ] &amp;&amp; echo $N
done;
</pre>
</li>
<li><strong> <a name="shell10">
@ -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.
</pre>
<pre>
#!/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 /"
</pre>
</li>
@ -411,15 +482,49 @@ feu) dans la premi
<p>
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. </p></li>
contiennent «eau», etc. </p>
<pre>
#!/bin/sh
FICHIER=resultat
MOTS="terre air eau feu"
[ -w $FICHIER ] &amp;&amp; echo "Le fichier $FICHIER existe déjà" &amp;&amp; exit 1
for i in $MOTS;
do
echo "Lignes contenant $i" >> $FICHIER
grep $i zola*.txt >> $FICHIER
echo >> $FICHIER
done;
</pre>
</li>
<li><strong> <a name="shell12">
Chercher le mot «mine» dans les chapitres 3, 4 et 5 de la première partie de
<em>Germinal</em>, et obtenir un fichier dans lequel figure le nombre
d'occurences du mot dans les fichiers, avec le numéro des lignes.</a></strong></li>
Chercher le mot «mine» dans les chapitres 3, 4 et 5 de la première partie
de <em>Germinal</em>, et obtenir un fichier dans lequel figure le nombre
d'occurences du mot dans les fichiers, avec le numéro des
lignes.</a></strong>
<pre>
#!/bin/sh
FICHIER=resultat
[ -w $FICHIER ] &amp;&amp; echo "Le fichier $FICHIER existe déjà" &amp;&amp; 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;
</pre>
</li>
@ -436,7 +541,18 @@ coupe fic 4 8
<p class="continue">
affichera les lignes 4 à 8 du fichier <tt>fic</tt>. Affichez des messages
en cas d'erreur (nombre de paramètres incorrect, fichier inexistant, etc).
</p></li>
</p>
<pre>
#!/bin/sh
[ $# != "3" ] &amp;&amp; echo "Nombre de paramètres incorrects" &amp;&amp; exit 1
[ ! -r $1 ] &amp;&amp; echo "Fichier $1 inexistant" &amp;&amp; exit 1
cat $1 | sed -n -e "$2,$3p"
</pre>
</li>
@ -463,7 +579,6 @@ Note
pour reconstruire l'arborescence, on utilise <tt>tar zxvf fichier</tt>.
</p></li>
<li><strong> <a name="shell15">
La commande suivante affiche le path complet de tous les fichiers finissant
@ -492,7 +607,7 @@ d
<li><strong> <a name="shell16">
É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

View file

@ -191,7 +191,7 @@ crochets par leur valeur; par exemple
<pre>
<span class="prompt">chaland ~ $</span>params bla ble bli blo blu
<span class="prompt">chaland ~ $</span> params bla ble bli blo blu
La commande params a 5 paramètre(s), que voici : bla ble bli blo blu
</pre></li>
@ -349,7 +349,7 @@ d
<li> <a href="solutions/systeme-sol.html#shell16">&icone.solution;
</a>
É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 :