aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Alessi <alessi@robertalessi.net>2018-09-22 19:53:36 +0200
committerRobert Alessi <alessi@robertalessi.net>2018-09-22 19:53:36 +0200
commitb073ee4af2b029ae7d3167c13352199c7ccb9628 (patch)
treee01beefe0fa1f1d6de8d0dced8ac8fcda864fdc2
parent645898a86597b111c9e6ea1f1467010adb8816ac (diff)
downloadcourses-b073ee4af2b029ae7d3167c13352199c7ccb9628.tar.gz
03-grep-bash.tex: booleans
-rw-r--r--_preamble.tex4
-rw-r--r--fichiers/03-grep-bash.tex102
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 @@
14\graphicspath{{images/}} 14\graphicspath{{images/}}
15 15
16\usepackage[french]{varioref} 16\usepackage[french]{varioref}
17\usepackage{hyperref} 17\usepackage[unicode=true]{hyperref}
18\hypersetup{unicode,colorlinks,allcolors=blue,linktocpage} 18\hypersetup{colorlinks,allcolors=blue,linktocpage}
19\usepackage{hyperxmp} 19\usepackage{hyperxmp}
20\usepackage{uri} 20\usepackage{uri}
21\usepackage[type={CC}, modifier={by-sa}, version ={3.0}]{doclicense} 21\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"
759echo "et l'archive $backupdir.zip a été créée." 759echo "et l'archive $backupdir.zip a été créée."
760\end{minted} 760\end{minted}
761\caption{bash: instruction \texttt{elif}} 761\caption{bash: instruction \texttt{elif}}
762\label{lst:elif}
762\end{listing} 763\end{listing}
763 764
764\subsection{Tests} 765\subsection{Tests}
@@ -847,8 +848,8 @@ la différence d'autres langages qui ont recours soit à des
847déclarations explicites telles que \verb|begin ... end| ou encore à 848déclarations explicites telles que \verb|begin ... end| ou encore à
848des opérateurs tels que \verb|{ ... }| 849des opérateurs tels que \verb|{ ... }|
849 850
850Voici un exemple d'une structure dans laquelle on a placé une 851Voici un exemple d'indentation d'une structure dans laquelle on a
851condition à l'intérieur d'une autre condition: 852placé une condition à l'intérieur d'une autre condition:
852\begin{listing}[H] 853\begin{listing}[H]
853\begin{minted}[linenos]{bash} 854\begin{minted}[linenos]{bash}
854#!/bin/bash 855#!/bin/bash
@@ -866,6 +867,103 @@ fi
866\caption{bash: exemple d'indentation} 867\caption{bash: exemple d'indentation}
867\end{listing} 868\end{listing}
868 869
870\subsection{Opérateurs booléens}
871\label{sec:operateurs-booleens}
872Les opérateurs booléens, dont le nom est tiré du mathématicien anglais
873George Boole, sont des opérateurs logiques que l'on peut associer à
874des conditions. En voici deux ici:
875\begin{enumerate}
876\item \verb+||+ pour \emph{ou};
877\item \verb|&&| pour \emph{et}.
878\end{enumerate}
879
880Par exemple, dans le \vref{lst:elif} ci-dessus, on pourrait remplacer
881les lignes 7--20 par le code ci-dessous:
882\begin{minted}[linenos]{bash}
883if [ -d "$backupdir" ] || [ -e "$backupdir".zip ]
884 then
885 echo "Le dossier $backupdir et/ou l'archive $backupdir.zip"
886 echo "existent déjà. Veuillez relancer le programme et saisir"
887 echo "un autre nom."
888 exit 1
889else
890 mkdir "$backupdir"
891fi
892\end{minted}
893
894\subsection{case}
895\label{sec:case}
896\verb|case| est une instruction qui permet d'exécuter différentes
897actions en fonction de la valeur d'une variable. Elle est intéressante
898à étudier ici car elle fait appel à la fois à la notion de variable et
899aux expressions régulières. La syntaxe est la suivante:
900\begin{minted}[linenos,escapeinside=||]{text}
901case |\emph{variable}| in
902 |\emph{regexpr1}|)
903 |\emph{commandes ...}|
904 ;;
905 |\emph{regexpr2}|)
906 |\emph{commandes ...}|
907 ;;
908esac
909\end{minted}
910\begin{quoting}
911 \textbf{Commentaire:}
912 \begin{enumerate}
913 \item L'instruction \verb|case| se termine par \verb|esac|, de même,
914 comme on l'a vu, que l'expression \verb|if| se termine par
915 \verb|fi|.
916 \item Les expressions régulières sont suivies d'une parenthèse
917 fermante.
918 \item Pour passer d'un jeu de commande au jeu suivant, on écrit, sur
919 une ligne \verb|;;|
920 \end{enumerate}
921\end{quoting}
922
923Voici un exemple facile à comprendre:
924\begin{minted}[linenos]{bash}
925#!/bin/bash
926
927echo "Entre le chien et le chat, quel est votre animal préféré?"
928read -p 'Saisissez votre réponse: ' animal
929
930case $animal in
931 [Cc]hien)
932 echo "Vous avez bien raison, le chien est le meilleur ami de l'homme."
933 ;;
934 [Cc]hat)
935 echo "Après le chien, c'était un en effet un choix possible."
936 ;;
937 *)
938 echo "Faites un effort, vous n'avez pas compris la question."
939 ;;
940esac
941\end{minted}
942\begin{quoting}
943 \textbf{Commentaire:}
944 \begin{enumerate}
945 \item À la ligne 4, l'utilisateur est invité à entrer une
946 réponse. L'instruction \verb|read| associe la réponse à la
947 variable \verb|animal|.
948 \item À la ligne 6, l'instruction \verb|case| reprend la variable
949 qui est donc préfixée par le signe \verb|$|.
950 \item Aux lignes 7 et 10, on permet à l'utilisateur d'entrer soit le
951 mot \emph{chien}, soit le mot \emph{chat}. L'initiale peut être
952 une minuscule ou une majuscule.
953 \item À la ligne 13, comme le signe \verb|*| est en \emph{bash} le
954 \emph{wildcard} qui représente toute séquence de caractères, la
955 commande de la ligne~14 sera forcément exécutée si les tests des
956 lignes~7 et~10 ont échoué.
957 \end{enumerate}
958\end{quoting}
959
960\begin{quoting}
961 \textbf{Remarque:} à la place de l'instruction \verb|case|, on
962 recommande aujourd'hui d'utiliser une nouvelle instruction,
963 \verb|switch|, dont la syntaxe, plus complexe, n'est pas étudiée
964 ici.
965\end{quoting}
966
869\hfill\verb|../..| à suivre 967\hfill\verb|../..| à suivre
870 968
871\end{document} 969\end{document}