From b073ee4af2b029ae7d3167c13352199c7ccb9628 Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Sat, 22 Sep 2018 19:53:36 +0200 Subject: 03-grep-bash.tex: booleans --- _preamble.tex | 4 +- fichiers/03-grep-bash.tex | 102 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 4 deletions(-) diff --git a/_preamble.tex b/_preamble.tex index e120d23..1cada26 100644 --- a/_preamble.tex +++ b/_preamble.tex @@ -14,8 +14,8 @@ \graphicspath{{images/}} \usepackage[french]{varioref} -\usepackage{hyperref} -\hypersetup{unicode,colorlinks,allcolors=blue,linktocpage} +\usepackage[unicode=true]{hyperref} +\hypersetup{colorlinks,allcolors=blue,linktocpage} \usepackage{hyperxmp} \usepackage{uri} \usepackage[type={CC}, modifier={by-sa}, version ={3.0}]{doclicense} diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index e4b6a71..3b685e3 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex @@ -759,6 +759,7 @@ echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" echo "et l'archive $backupdir.zip a été créée." \end{minted} \caption{bash: instruction \texttt{elif}} +\label{lst:elif} \end{listing} \subsection{Tests} @@ -847,8 +848,8 @@ la différence d'autres langages qui ont recours soit à des déclarations explicites telles que \verb|begin ... end| ou encore à des opérateurs tels que \verb|{ ... }| -Voici un exemple d'une structure dans laquelle on a placé une -condition à l'intérieur d'une autre condition: +Voici un exemple d'indentation d'une structure dans laquelle on a +placé une condition à l'intérieur d'une autre condition: \begin{listing}[H] \begin{minted}[linenos]{bash} #!/bin/bash @@ -866,6 +867,103 @@ fi \caption{bash: exemple d'indentation} \end{listing} +\subsection{Opérateurs booléens} +\label{sec:operateurs-booleens} +Les opérateurs booléens, dont le nom est tiré du mathématicien anglais +George Boole, sont des opérateurs logiques que l'on peut associer à +des conditions. En voici deux ici: +\begin{enumerate} +\item \verb+||+ pour \emph{ou}; +\item \verb|&&| pour \emph{et}. +\end{enumerate} + +Par exemple, dans le \vref{lst:elif} ci-dessus, on pourrait remplacer +les lignes 7--20 par le code ci-dessous: +\begin{minted}[linenos]{bash} +if [ -d "$backupdir" ] || [ -e "$backupdir".zip ] + then + echo "Le dossier $backupdir et/ou l'archive $backupdir.zip" + echo "existent déjà. Veuillez relancer le programme et saisir" + echo "un autre nom." + exit 1 +else + mkdir "$backupdir" +fi +\end{minted} + +\subsection{case} +\label{sec:case} +\verb|case| est une instruction qui permet d'exécuter différentes +actions en fonction de la valeur d'une variable. Elle est intéressante +à étudier ici car elle fait appel à la fois à la notion de variable et +aux expressions régulières. La syntaxe est la suivante: +\begin{minted}[linenos,escapeinside=||]{text} +case |\emph{variable}| in + |\emph{regexpr1}|) + |\emph{commandes ...}| + ;; + |\emph{regexpr2}|) + |\emph{commandes ...}| + ;; +esac +\end{minted} +\begin{quoting} + \textbf{Commentaire:} + \begin{enumerate} + \item L'instruction \verb|case| se termine par \verb|esac|, de même, + comme on l'a vu, que l'expression \verb|if| se termine par + \verb|fi|. + \item Les expressions régulières sont suivies d'une parenthèse + fermante. + \item Pour passer d'un jeu de commande au jeu suivant, on écrit, sur + une ligne \verb|;;| + \end{enumerate} +\end{quoting} + +Voici un exemple facile à comprendre: +\begin{minted}[linenos]{bash} +#!/bin/bash + +echo "Entre le chien et le chat, quel est votre animal préféré?" +read -p 'Saisissez votre réponse: ' animal + +case $animal in + [Cc]hien) + echo "Vous avez bien raison, le chien est le meilleur ami de l'homme." + ;; + [Cc]hat) + echo "Après le chien, c'était un en effet un choix possible." + ;; + *) + echo "Faites un effort, vous n'avez pas compris la question." + ;; +esac +\end{minted} +\begin{quoting} + \textbf{Commentaire:} + \begin{enumerate} + \item À la ligne 4, l'utilisateur est invité à entrer une + réponse. L'instruction \verb|read| associe la réponse à la + variable \verb|animal|. + \item À la ligne 6, l'instruction \verb|case| reprend la variable + qui est donc préfixée par le signe \verb|$|. + \item Aux lignes 7 et 10, on permet à l'utilisateur d'entrer soit le + mot \emph{chien}, soit le mot \emph{chat}. L'initiale peut être + une minuscule ou une majuscule. + \item À la ligne 13, comme le signe \verb|*| est en \emph{bash} le + \emph{wildcard} qui représente toute séquence de caractères, la + commande de la ligne~14 sera forcément exécutée si les tests des + lignes~7 et~10 ont échoué. + \end{enumerate} +\end{quoting} + +\begin{quoting} + \textbf{Remarque:} à la place de l'instruction \verb|case|, on + recommande aujourd'hui d'utiliser une nouvelle instruction, + \verb|switch|, dont la syntaxe, plus complexe, n'est pas étudiée + ici. +\end{quoting} + \hfill\verb|../..| à suivre \end{document} -- cgit v1.2.3