From c2698094f2cd48a36dcadf161127d69bc33697f9 Mon Sep 17 00:00:00 2001
From: Robert Alessi <alessi@robertalessi.net>
Date: Wed, 19 Sep 2018 17:29:45 +0200
Subject: 03-grep-bash.tex: added conditions (1/2)

---
 fichiers/03-grep-bash.tex | 68 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

(limited to 'fichiers/03-grep-bash.tex')

diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex
index 26409f9..1dc9e2c 100644
--- a/fichiers/03-grep-bash.tex
+++ b/fichiers/03-grep-bash.tex
@@ -634,6 +634,74 @@ Terminé. ./backup.sh a copié 4 fichiers .tex dans Houba
 et l'archive Houba.zip a été créée.
 \end{minted}
 
+\section{Conditions}
+\label{sec:conditions}
+Il est souvent très utile de n'exécuter des lignes de code que si
+certaines conditions sont remplies. Reprenons ici l'exemple du script
+\verb|backup.sh|: au moment où le script crée le répertoire de
+sauvegarde, il ne contrôle pas si ce répertoire existe déjà, ce qui est
+un défaut. Voici comment on peut créer une condition adaptée à cette
+situation:
+\begin{minted}[linenos]{bash}
+if [ -d $backupdir ]
+then
+  echo "Le dossier $backupdir existe déjà. Veuillez relancer le"
+  echo "programme et saisir un autre nom."
+  exit 1
+else
+  mkdir "$backupdir"
+fi
+\end{minted}
+\begin{quoting}
+  \textbf{Commentaire:}
+  \begin{enumerate}
+  \item Observez la structure de la condition:
+    \begin{itemize}
+    \item ligne 1: \mintinline{bash}|if| $\rightarrow$ \emph{si
+        <condition>} où la condition est posée entre crochets. Dans
+      l'expression entre les crochets, %
+      \verb|-d $backupdir|, \verb|-d| signifie: \verb|$backupdir|
+      existe \emph{et} est un répertoire;
+    \item ligne 2: \mintinline{bash}|then| $\rightarrow$ \emph{alors,
+        passez à la ligne suivante};
+    \item ligne 6: \mintinline{bash}|else| $\rightarrow$
+      \emph{autrement, passez à la ligne suivante};
+    \item ligne 8: \mintinline{bash}|fi| $\rightarrow$ \emph{fin de la
+      condition} (en fait les deux lettres de la conjonction \verb|if|
+    écrite à l'envers).
+    \end{itemize}
+  \item À la ligne 5, la commande \verb|exit 1| ordonne au programme
+    de se terminer immédiatement et de renvoyer la valeur \verb|1|
+    comme numéro d'état (\emph{status number}). Par convention,
+    \verb|0| est pour \emph{true} (le programme a bien été exécuté) et
+    \verb|1| est pour \emph{false} (il y a eu une erreur).
+  \end{enumerate}
+\end{quoting}
+
+Voici donc comment se présente le script \verb|backup.sh|:
+\begin{minted}[linenos]{bash}
+#!/bin/bash
+echo "Veuillez choisir l'extension des fichiers à sauvegarder"
+echo "(sans le point):"
+read -p 'extension: ' ext
+echo "Veuillez choisir le nom du dossier de sauvegarde:"
+read -p 'dossier: ' backupdir
+if [ -d $backupdir ]
+then
+  echo "Le dossier $backupdir existe déjà. Veuillez relancer le"
+  echo "programme et saisir un autre nom."
+  exit 1
+else
+  mkdir "$backupdir"
+fi
+cp *.$ext "$backupdir"
+nbre=$(ls $backupdir/*.$ext | wc -l)
+zip -r "$backupdir".zip "$backupdir"
+echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir"
+echo "et l'archive $backupdir.zip a été créée."
+\end{minted}
+
+
 \hfill\verb|../..| à suivre
 
 \end{document}
-- 
cgit v1.2.3

