aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Alessi <alessi@robertalessi.net>2018-09-19 17:29:45 +0200
committerRobert Alessi <alessi@robertalessi.net>2018-09-19 17:29:45 +0200
commitc2698094f2cd48a36dcadf161127d69bc33697f9 (patch)
tree70b06b9dd5946372d559bcaf212b576fac4e9342
parentbd3638c2dd0932176a4bc4660fa58b9abea1e11e (diff)
downloadcourses-c2698094f2cd48a36dcadf161127d69bc33697f9.tar.gz
03-grep-bash.tex: added conditions (1/2)
-rw-r--r--fichiers/03-grep-bash.tex68
1 files changed, 68 insertions, 0 deletions
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
634et l'archive Houba.zip a été créée. 634et l'archive Houba.zip a été créée.
635\end{minted} 635\end{minted}
636 636
637\section{Conditions}
638\label{sec:conditions}
639Il est souvent très utile de n'exécuter des lignes de code que si
640certaines conditions sont remplies. Reprenons ici l'exemple du script
641\verb|backup.sh|: au moment où le script crée le répertoire de
642sauvegarde, il ne contrôle pas si ce répertoire existe déjà, ce qui est
643un défaut. Voici comment on peut créer une condition adaptée à cette
644situation:
645\begin{minted}[linenos]{bash}
646if [ -d $backupdir ]
647then
648 echo "Le dossier $backupdir existe déjà. Veuillez relancer le"
649 echo "programme et saisir un autre nom."
650 exit 1
651else
652 mkdir "$backupdir"
653fi
654\end{minted}
655\begin{quoting}
656 \textbf{Commentaire:}
657 \begin{enumerate}
658 \item Observez la structure de la condition:
659 \begin{itemize}
660 \item ligne 1: \mintinline{bash}|if| $\rightarrow$ \emph{si
661 <condition>} où la condition est posée entre crochets. Dans
662 l'expression entre les crochets, %
663 \verb|-d $backupdir|, \verb|-d| signifie: \verb|$backupdir|
664 existe \emph{et} est un répertoire;
665 \item ligne 2: \mintinline{bash}|then| $\rightarrow$ \emph{alors,
666 passez à la ligne suivante};
667 \item ligne 6: \mintinline{bash}|else| $\rightarrow$
668 \emph{autrement, passez à la ligne suivante};
669 \item ligne 8: \mintinline{bash}|fi| $\rightarrow$ \emph{fin de la
670 condition} (en fait les deux lettres de la conjonction \verb|if|
671 écrite à l'envers).
672 \end{itemize}
673 \item À la ligne 5, la commande \verb|exit 1| ordonne au programme
674 de se terminer immédiatement et de renvoyer la valeur \verb|1|
675 comme numéro d'état (\emph{status number}). Par convention,
676 \verb|0| est pour \emph{true} (le programme a bien été exécuté) et
677 \verb|1| est pour \emph{false} (il y a eu une erreur).
678 \end{enumerate}
679\end{quoting}
680
681Voici donc comment se présente le script \verb|backup.sh|:
682\begin{minted}[linenos]{bash}
683#!/bin/bash
684echo "Veuillez choisir l'extension des fichiers à sauvegarder"
685echo "(sans le point):"
686read -p 'extension: ' ext
687echo "Veuillez choisir le nom du dossier de sauvegarde:"
688read -p 'dossier: ' backupdir
689if [ -d $backupdir ]
690then
691 echo "Le dossier $backupdir existe déjà. Veuillez relancer le"
692 echo "programme et saisir un autre nom."
693 exit 1
694else
695 mkdir "$backupdir"
696fi
697cp *.$ext "$backupdir"
698nbre=$(ls $backupdir/*.$ext | wc -l)
699zip -r "$backupdir".zip "$backupdir"
700echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir"
701echo "et l'archive $backupdir.zip a été créée."
702\end{minted}
703
704
637\hfill\verb|../..| à suivre 705\hfill\verb|../..| à suivre
638 706
639\end{document} 707\end{document}