+
+<h1>Écriture de script <i>shell</i></h1>
+<div class="sws-slide">
+ <h1>Script shell</h1>
+ <p><a>Mentalité Unix</a> beaucoup de petits programmes spécifiques,
+ que l'on combine au moyen de scripts pour réaliser des actions
+ complexes. Exemple de fichier script:
+ </p>
+ <code style="background:white;">
+ <s>#!/bin/bash</s>
+
+ <s>for</s> i <s>in</s> img_*.jpg
+ <s>do</s>
+ base=$(echo "$i" | cut -f 2- -d '_')
+ nouveau=photo_"$base"
+ <s>if</s> test -f "$nouveau"
+ <s>then</s>
+ echo "Attention, le fichier $nouveau existe déjà"
+ continue
+ <s>else</s>
+ echo "Renommage de $i en $nouveau"
+ mv "$i" "$nouveau"
+ <s>fi</s>
+ <s>done</s>
+ </code>
+</div>
+<div class="sws-slide">
+<h1>Rendre un script exécutable</h1>
+<p>Si un fichier <a>texte</a> (quel que soit son extension), commence
+ par les caractères <tt>#!/chemin/vers/un/programme</tt>, on peut
+ rendre ce fichier exécutable (<tt>chmod +x</tt>). Si on l'exécute,
+ le contenu du fichier est passé comme argument à <tt>programme</tt>
+ (qui est généralement un interpréteur)
+</p>
+<p><tt>#!/bin/bash</tt> signifie que le corps du fichier est passé au
+ programme <tt>bash</tt> qui est l'interprète de commande
+ (le <i>shell</i>).
+</p>
+</div>
+<div class="sws-slide">
+<h1>Que mettre dans un script</h1>
+<ul>
+ <li> des commandes (comme si on les entrait dans le terminal)</li>
+ <li> des structures de contrôle (boucles <tt>for</tt>, <tt>if then
+ else</tt>) </li>
+ <li> des définitions de variables </li>
+</ul>
+</div>
+<div class="sws-slide">
+<h1>Définitions de variables</h1>
+<p>On peut définir des variables au moyen de la notation
+<code>VARIABLE=<i>contenu</i></code> et on peut utiliser la variable
+avec la notation <tt>$VARIABLE</tt> </p>
+<ul>
+ <li>Attention, pas d'espace autour du <tt>=</tt></li>
+ <li>nom de variable en majuscule ou minuscule</li>
+ <li>contenu est une chaine de caractères. Si elle contient des
+ espaces, utiliser <tt>" ... "</tt></li>
+</ul>
+<p>exemple de définition :</p>
+<code> i=123
+ j="Ma super chaine"
+ TOTO=titi
+ echo $TOTO
+</code>
+<p> exemple d'utilisation: <tt> echo $j $i $TOTO </tt><br/>
+affiche « <tt> Ma super chaine 123 titi</tt></p>
+</div>
+<div class="sws-slide">
+<h1>Boucles <tt>for</tt></h1>
+<p>Les boucles <tt> for </tt> ont la syntaxe:
+<code>
+ for VARIABLE in elem<sub>1</sub> ... elem<sub>n</sub>
+ do
+ ....
+ done
+</code>
+chaque <tt>elem<sub>i</sub></tt> est expansé (comme une ligne de
+commande) avant l'évaluation de la boucle:
+<code>
+ for i in *.txt
+ do
+ echo $i est un fichier texte
+ done
+</code>
+On peut quitter une boucle prématurément en utilisant <tt>break</tt>
+et passer directement au tour suivant avec <tt>continue</tt>
+</p>
+</div>
+<div class="sws-slide">
+<h1>Conditionnelle</h1>
+<p>La syntaxe est :
+<code> if <i>commande</i>
+ then
+ ...
+ else
+ ...
+ fi
+</code>
+<tt><i>commande</i></tt> est évaluée. Si elle se termine avec succès,
+la branche <tt>then</tt> est prise. Si elle se termine avec un code
+d'erreur, la branche <tt>else</tt> est prise. On peut utiliser la
+commande <tt>test</tt> qui permet de tester plusieurs conditions
+(existance d'un fichier, égalités de deux nombres, ...) et se termine
+par un succès si le teste est vrai et par un code d'erreur dans le
+cas contraire</p>
+</div>
+<div class="sws-slide">
+<h1>Conditionnelle (exemple)</h1>
+<p>On regarde tour à tour si fichier1.txt, fichier2.txt, ... existent :
+<code>
+ for i in 1 2 3 4 5 6
+ do
+ if test -f "fichier$i".txt
+ then
+ echo le fichier "fichier$i".txt existe
+ fi
+ done
+</code>
+</p>
+ </div>
+<div class="sws-slide">
+<h1>Sous-commandes et chaines</h1>
+<p>Il est pratique de pouvoir mettre <a>l'affichage d'une commande</a>
+ dans une variable. On utilise <tt>$( commande ... )</tt>:
+<code>
+ MESFICHIER=$(ls *.txt)
+ for i in $MESFICHIER
+ do
+ echo Fichier: $i
+ done
+</code>
+Attention à la présence de guillemets autour des variables. S'il y a
+f1.txt et f2.txt dans le répertoire courant:<br/>
+<code style="left:10%;position:relative;width:40%;float:left;">
+ MESFICHIER=$(ls *.txt)
+ for i in $MESFICHIER
+ do
+ echo Fichier: $i
+ done
+<s>affiche:</s>
+ Fichier: f1.txt
+ Fichier: f2.txt
+</code>
+<code style="width:40%;float:left;left:10%;position:relative">
+ MESFICHIER=$(ls *.txt)
+ for i in "$MESFICHIER"
+ do
+ echo Fichier: $i
+ done
+<s>affiche:</s>
+ Fichier: f1.txt f2.txt
+</code>
+</p>
+</div>
+<div class="sws-slide">
+<h1>Commandes utiles</h1>
+<ul>
+ <li><tt>seq <i>m</i> <i>n</i> </tt> : affiche la liste de tous les
+ nombres entre <i>m</i> <i>n</i> </li>
+<li><tt>echo ... </tt> affiche ses arguments sur la sortie
+ standard</li>
+<li><tt>printf "chaine" ... </tt> affiche ses arguments au moyen d'une
+ chaine de format (comme le printf de C)</li>
+<li><tt>date</tt> : affiche la date courante </li>
+<li><tt>cut</tt> : découpe une chaine selon des caractères de
+ séparations ou des positions</li>
+</ul>
+</div>
+<h1>Programmes non interactifs</h1>