aboutsummaryrefslogtreecommitdiff
path: root/fichiers
diff options
context:
space:
mode:
authorRobert Alessi <alessi@robertalessi.net>2018-09-20 12:05:45 +0200
committerRobert Alessi <alessi@robertalessi.net>2018-09-20 12:05:45 +0200
commit645898a86597b111c9e6ea1f1467010adb8816ac (patch)
treee96f995fa3270ab69db9c33e48ee7da9df111fe8 /fichiers
parent01cc51b33ac7dd9b3404478a09642c5005bc228a (diff)
downloadcourses-645898a86597b111c9e6ea1f1467010adb8816ac.tar.gz
03-grep-bash.tex: indentation
Diffstat (limited to 'fichiers')
-rw-r--r--fichiers/03-grep-bash.tex101
1 files changed, 94 insertions, 7 deletions
diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex
index 4ce1bba..e4b6a71 100644
--- a/fichiers/03-grep-bash.tex
+++ b/fichiers/03-grep-bash.tex
@@ -2,6 +2,7 @@
2\input{../_preamble_bbl} 2\input{../_preamble_bbl}
3\usepackage{menukeys} 3\usepackage{menukeys}
4\title{grep et bash} 4\title{grep et bash}
5\publishers{\url{https://notabug.org/ralessi/courses/}}
5\usepackage{units} 6\usepackage{units}
6\usepackage{cleveref} 7\usepackage{cleveref}
7\usepackage{booktabs} 8\usepackage{booktabs}
@@ -11,6 +12,7 @@
11\mdfsetup{ 12\mdfsetup{
12 backgroundcolor=Lavender, 13 backgroundcolor=Lavender,
13 hidealllines=true} 14 hidealllines=true}
15\usepackage{float}
14\usepackage[newfloat]{minted} 16\usepackage[newfloat]{minted}
15\SetupFloatingEnvironment{listing}{listname=Listings} 17\SetupFloatingEnvironment{listing}{listname=Listings}
16\surroundwithmdframed{minted} 18\surroundwithmdframed{minted}
@@ -19,7 +21,6 @@
19 breaksymbolright=\small\carriagereturn} 21 breaksymbolright=\small\carriagereturn}
20\setmintedinline{bgcolor=Lavender} 22\setmintedinline{bgcolor=Lavender}
21\usepackage{soul} 23\usepackage{soul}
22
23\begin{document} 24\begin{document}
24\maketitle 25\maketitle
25\renewcommand{\contentsname}{Sommaire} 26\renewcommand{\contentsname}{Sommaire}
@@ -647,7 +648,7 @@ sauvegarde, il ne contrôle pas si ce répertoire existe déjà, ce qui est
647un défaut. Voici comment on peut créer une condition adaptée à cette 648un défaut. Voici comment on peut créer une condition adaptée à cette
648situation: 649situation:
649\begin{minted}[linenos]{bash} 650\begin{minted}[linenos]{bash}
650if [ -d $backupdir ] 651if [ -d "$backupdir" ]
651then 652then
652 echo "Le dossier $backupdir existe déjà. Veuillez relancer le" 653 echo "Le dossier $backupdir existe déjà. Veuillez relancer le"
653 echo "programme et saisir un autre nom." 654 echo "programme et saisir un autre nom."
@@ -664,7 +665,7 @@ fi
664 \item ligne 1: \mintinline{bash}|if| $\rightarrow$ \emph{si 665 \item ligne 1: \mintinline{bash}|if| $\rightarrow$ \emph{si
665 <condition>} où la condition est posée entre crochets. Dans 666 <condition>} où la condition est posée entre crochets. Dans
666 l'expression entre les crochets, % 667 l'expression entre les crochets, %
667 \verb|-d $backupdir|, \verb|-d| signifie: \verb|$backupdir| 668 \verb|-d "$backupdir"|, \verb|-d| signifie: \verb|$backupdir|
668 existe \emph{et} est un répertoire; 669 existe \emph{et} est un répertoire;
669 \item ligne 2: \mintinline{bash}|then| $\rightarrow$ \emph{alors, 670 \item ligne 2: \mintinline{bash}|then| $\rightarrow$ \emph{alors,
670 passez à la ligne suivante}; 671 passez à la ligne suivante};
@@ -684,7 +685,7 @@ fi
684 685
685Voici donc comment se présente le script \verb|backup.sh| une fois la 686Voici donc comment se présente le script \verb|backup.sh| une fois la
686condition insérée: 687condition insérée:
687\begin{listing}[h] 688\begin{listing}[H]
688\begin{minted}[linenos,highlightlines={7-14}]{bash} 689\begin{minted}[linenos,highlightlines={7-14}]{bash}
689#!/bin/bash 690#!/bin/bash
690echo "Veuillez choisir l'extension des fichiers à sauvegarder" 691echo "Veuillez choisir l'extension des fichiers à sauvegarder"
@@ -692,7 +693,7 @@ echo "(sans le point):"
692read -p 'extension: ' ext 693read -p 'extension: ' ext
693echo "Veuillez choisir le nom du dossier de sauvegarde:" 694echo "Veuillez choisir le nom du dossier de sauvegarde:"
694read -p 'dossier: ' backupdir 695read -p 'dossier: ' backupdir
695if [ -d $backupdir ] 696if [ -d "$backupdir" ]
696then 697then
697 echo "Le dossier $backupdir existe déjà. Veuillez relancer le" 698 echo "Le dossier $backupdir existe déjà. Veuillez relancer le"
698 echo "programme et saisir un autre nom." 699 echo "programme et saisir un autre nom."
@@ -706,10 +707,60 @@ zip -r "$backupdir".zip "$backupdir"
706echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" 707echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir"
707echo "et l'archive $backupdir.zip a été créée." 708echo "et l'archive $backupdir.zip a été créée."
708\end{minted} 709\end{minted}
709\caption{bash: exemple de condition if-then-else} 710\caption{bash: exemple de condition \texttt{if-then-else}}
710\label{lst:if-then-else} 711\label{lst:if-then-else}
711\end{listing} 712\end{listing}
712 713
714\subsection{Conditions en série}
715\label{sec:conditions-en-serie}
716Supposons que le répertoire de sauvegarde ait été supprimé mais que
717l'archive \verb|.zip| correspondante ne l'ait pas été. Dans ce cas, le
718script \verb|backup.sh| l'écraserait. Pour éviter cela, nous pouvons
719utiliser dans le script l'instruction \verb|elif| qui permet de
720construire des conditions en série. Littéralement, \verb|elif| est
721pour \emph{else if}, \enquote{ou autrement, si\ldots}. Voici donc ce
722qu'il faut ajouter:
723\begin{minted}{bash}
724elif [ -e "$backupdir".zip ]
725 then
726 echo "L'archive $backupdir.zip existe déjà. Veuillez la supprimer"
727 echo "ou la déplacer en dehors de ce dossier, puis relancez le"
728 echo "programme."
729 exit 1
730\end{minted}
731
732Ce qui donne le script \verb|backup.sh| suivant:
733\begin{listing}[H]
734\begin{minted}[linenos,highlightlines={12-17}]{bash}
735#!/bin/bash
736echo "Veuillez choisir l'extension des fichiers à sauvegarder"
737echo "(sans le point):"
738read -p 'extension: ' ext
739echo "Veuillez choisir le nom du dossier de sauvegarde:"
740read -p 'dossier: ' backupdir
741if [ -d "$backupdir" ]
742 then
743 echo "Le dossier $backupdir existe déjà. Veuillez relancer le"
744 echo "programme et saisir un autre nom."
745 exit 1
746elif [ -e "$backupdir".zip ]
747 then
748 echo "L'archive $backupdir.zip existe déjà. Veuillez la supprimer"
749 echo "ou la déplacer en dehors de ce dossier, puis relancez le"
750 echo "programme."
751 exit 1
752else
753 mkdir "$backupdir"
754fi
755cp *.$ext "$backupdir"
756nbre=$(ls $backupdir/*.$ext | wc -l)
757zip -r "$backupdir".zip "$backupdir"
758echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir"
759echo "et l'archive $backupdir.zip a été créée."
760\end{minted}
761\caption{bash: instruction \texttt{elif}}
762\end{listing}
763
713\subsection{Tests} 764\subsection{Tests}
714\label{sec:tests} 765\label{sec:tests}
715Le tableau suivant donne la liste des tests les plus répandus que l'on 766Le tableau suivant donne la liste des tests les plus répandus que l'on
@@ -748,7 +799,7 @@ droits comme le montre la ligne~7 du \vref{lst:if-then-else}.
748À l'intérieur du script \verb|bash|, les crochets renvoient en fait à 799À l'intérieur du script \verb|bash|, les crochets renvoient en fait à
749une commande par ailleurs disponible: \verb|test|. La commande 800une commande par ailleurs disponible: \verb|test|. La commande
750\verb|test| renvoie en fait la sortie \verb|0| si le résultat est 801\verb|test| renvoie en fait la sortie \verb|0| si le résultat est
751\emph{vrai} et \verb|1| si le résultat est faux. Le terminal ne 802\emph{vrai} et \verb|1| si le résultat est \emph{faux}. Le terminal ne
752retourne pas le resultat, mais celui-ci est associé à une variable 803retourne pas le resultat, mais celui-ci est associé à une variable
753\verb|$?| que l'on peut afficher par la commande: 804\verb|$?| que l'on peut afficher par la commande:
754\mintinline{bash}|echo $?|. En voici quelques exemples: 805\mintinline{bash}|echo $?|. En voici quelques exemples:
@@ -779,6 +830,42 @@ fichiers _preamble_bbl.tex _preamble.log README.md
779 arithmétique. 830 arithmétique.
780\end{quoting} 831\end{quoting}
781 832
833\subsection{Indentation}
834\label{sec:indentation}
835L'indentation est une technique qui consiste à donner aux lignes de
836code différentes profondeurs de marge à gauche de façon à distinguer
837clairement des blocs logiques. Les lignes 7--20 du
838\vref{lst:if-then-else} en donnent un exemple. L'indentation permet de
839faire apparaître clairement ce qui dépend de l'instruction \verb|if|
840(l.~7), puis \verb|elif| (l.~12) et enfin \verb|else| (l.~18).
841
842Cette technique est commune à tous les langages informatiques et tous
843les programmeurs l'utilisent. En Python, que nous étudierons plus
844tard, l'indendation fait même partie du langage lui-même, puisque
845Python a recours à l'indentation pour structurer les blocs logiques, à
846la différence d'autres langages qui ont recours soit à des
847déclarations explicites telles que \verb|begin ... end| ou encore à
848des opérateurs tels que \verb|{ ... }|
849
850Voici un exemple d'une structure dans laquelle on a placé une
851condition à l'intérieur d'une autre condition:
852\begin{listing}[H]
853\begin{minted}[linenos]{bash}
854#!/bin/bash
855if [ $1 -gt 10 ]
856then
857 echo "$1 est supérieur à 10"
858 if [ $1 -gt 100 ]
859 then
860 echo "et $1 est même supérieur à 100!"
861 fi
862else
863 echo "Il faut aller au-dessus de 10 pour avoir une réponse!"
864fi
865\end{minted}
866\caption{bash: exemple d'indentation}
867\end{listing}
868
782\hfill\verb|../..| à suivre 869\hfill\verb|../..| à suivre
783 870
784\end{document} 871\end{document}