From c2698094f2cd48a36dcadf161127d69bc33697f9 Mon Sep 17 00:00:00 2001 From: Robert Alessi 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') 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 + } 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