diff options
-rw-r--r-- | _preamble.tex | 4 | ||||
-rw-r--r-- | fichiers/01-ligne-de-commande.tex | 2 | ||||
-rw-r--r-- | fichiers/03-grep-bash.tex | 104 |
3 files changed, 103 insertions, 7 deletions
diff --git a/_preamble.tex b/_preamble.tex index 8f02fd7..d71b26d 100644 --- a/_preamble.tex +++ b/_preamble.tex | |||
@@ -20,6 +20,10 @@ | |||
20 | \hypersetup{colorlinks,allcolors=blue,linktocpage} | 20 | \hypersetup{colorlinks,allcolors=blue,linktocpage} |
21 | \usepackage{hyperxmp} | 21 | \usepackage{hyperxmp} |
22 | \usepackage{uri} | 22 | \usepackage{uri} |
23 | |||
24 | \usepackage{cleveref} | ||
25 | \crefname{table}{tableau}{tableaux} | ||
26 | |||
23 | \usepackage[type={CC}, modifier={by-sa}, version ={3.0}]{doclicense} | 27 | \usepackage[type={CC}, modifier={by-sa}, version ={3.0}]{doclicense} |
24 | \author{Robert Alessi} | 28 | \author{Robert Alessi} |
25 | \lowertitleback{\footnotesize\textcopyright{} 2018 Robert Alessi | 29 | \lowertitleback{\footnotesize\textcopyright{} 2018 Robert Alessi |
diff --git a/fichiers/01-ligne-de-commande.tex b/fichiers/01-ligne-de-commande.tex index 5b3b6e2..b4d438f 100644 --- a/fichiers/01-ligne-de-commande.tex +++ b/fichiers/01-ligne-de-commande.tex | |||
@@ -120,7 +120,7 @@ fait à l'aide de la souris. En voici les principales raisons: | |||
120 | décrites pré\-cé\-dem\-ment. Il suffit, comme on le voit ici, de | 120 | décrites pré\-cé\-dem\-ment. Il suffit, comme on le voit ici, de |
121 | séparer les commandes par un point-virgule \mintinline{text}{;}; | 121 | séparer les commandes par un point-virgule \mintinline{text}{;}; |
122 | \item les lignes de commande acceptent des caractères appelés | 122 | \item les lignes de commande acceptent des caractères appelés |
123 | \emph{jokers} à l'aide desquels on peut déclencher des opérations | 123 | \emph{wildcards} à l'aide desquels on peut déclencher des opérations |
124 | complexes, portant sur un très grand nombre de fichiers. Par | 124 | complexes, portant sur un très grand nombre de fichiers. Par |
125 | exemple, le caractère \mintinline{text}{*} peut se substituer à | 125 | exemple, le caractère \mintinline{text}{*} peut se substituer à |
126 | n'importe quelle chaîne de caractères. Ainsi, pour reprendre ce qui | 126 | n'importe quelle chaîne de caractères. Ainsi, pour reprendre ce qui |
diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index 65f01cf..aaf007f 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex | |||
@@ -4,7 +4,6 @@ | |||
4 | \title{grep et bash} | 4 | \title{grep et bash} |
5 | \publishers{\url{https://notabug.org/ralessi/courses/}} | 5 | \publishers{\url{https://notabug.org/ralessi/courses/}} |
6 | \usepackage{units} | 6 | \usepackage{units} |
7 | \usepackage{cleveref} | ||
8 | \usepackage{booktabs} | 7 | \usepackage{booktabs} |
9 | \usepackage{xltabular} | 8 | \usepackage{xltabular} |
10 | \usepackage{dingbat} | 9 | \usepackage{dingbat} |
@@ -20,6 +19,7 @@ | |||
20 | breaklines, | 19 | breaklines, |
21 | breaksymbolright=\small\carriagereturn} | 20 | breaksymbolright=\small\carriagereturn} |
22 | \setmintedinline{bgcolor=Lavender} | 21 | \setmintedinline{bgcolor=Lavender} |
22 | \usepackage{capt-of} | ||
23 | \usepackage{soul} | 23 | \usepackage{soul} |
24 | \makeindex[name=cmds, intoc, title={Liste des commandes et | 24 | \makeindex[name=cmds, intoc, title={Liste des commandes et |
25 | instructions}] | 25 | instructions}] |
@@ -544,8 +544,10 @@ echo "et l'archive $backupdir.zip a été créée." | |||
544 | \end{minted} | 544 | \end{minted} |
545 | 545 | ||
546 | \paragraph{read} | 546 | \paragraph{read} |
547 | \index[cmds]{read|textbf} | 547 | \label{ref:read} |
548 | Cette nouvelle commande est expliquée dans le commentaire qui suit: | 548 | \index[cmds]{read|textbf} Cette nouvelle commande est expliquée dans |
549 | le commentaire qui suit\footnote{Voir aussi plus loin | ||
550 | \vpageref{ref:read-plus}.}: | ||
549 | \begin{quoting} | 551 | \begin{quoting} |
550 | \textbf{Commentaire:} | 552 | \textbf{Commentaire:} |
551 | \begin{enumerate} | 553 | \begin{enumerate} |
@@ -803,6 +805,7 @@ droits comme le montre la ligne~7 du \vref{lst:if-then-else}. | |||
803 | exécution \\ | 805 | exécution \\ |
804 | \bottomrule | 806 | \bottomrule |
805 | \caption{tests\label{tab:tests}} | 807 | \caption{tests\label{tab:tests}} |
808 | \label{tab:tests} | ||
806 | \end{xltabular} | 809 | \end{xltabular} |
807 | 810 | ||
808 | \paragraph{test} | 811 | \paragraph{test} |
@@ -988,9 +991,8 @@ d'instructions doit reprendre et continuer à s'exécuter aussi | |||
988 | longtemps qu'une condition donnée n'est pas remplie. | 991 | longtemps qu'une condition donnée n'est pas remplie. |
989 | 992 | ||
990 | Prenons un exemple simple. Nous avons dans un répertoire plusieurs | 993 | Prenons un exemple simple. Nous avons dans un répertoire plusieurs |
991 | centaines d'images et que nous souhaitons convertir au format | 994 | centaines d'images et nous souhaitons convertir au format \verb|.png| |
992 | \verb|.png| toutes les images qui sont enregistrées au format | 995 | toutes les images qui sont enregistrées au format \verb|.tiff|. |
993 | \verb|.tiff|. | ||
994 | 996 | ||
995 | Pour convertir une seule image, nous pouvons utiliser l'outil en ligne | 997 | Pour convertir une seule image, nous pouvons utiliser l'outil en ligne |
996 | de commande \verb|convert| fourni par le programme | 998 | de commande \verb|convert| fourni par le programme |
@@ -1079,7 +1081,97 @@ done | |||
1079 | \end{enumerate} | 1081 | \end{enumerate} |
1080 | \end{quoting} | 1082 | \end{quoting} |
1081 | 1083 | ||
1084 | \paragraph{while} | ||
1085 | \index[cmds]{while|textbf} L'expression \verb|while| exécute les | ||
1086 | lignes de code qui suivent aussi longtemps qu'un test donné retourne | ||
1087 | un résultat positif (\enquote{vrai}, en anglais \emph{true}). Le | ||
1088 | script \verb|countlines.sh|, donné dans le \cref{lst:countlines} | ||
1089 | ci-dessous, utilise cette expression pour compter les lignes des | ||
1090 | fichiers. | ||
1091 | \begin{minted}[linenos,highlightlines={13,16-17}]{bash} | ||
1092 | #!/bin/bash | ||
1093 | |||
1094 | echo "Entrez le nom du fichier dont vous voulez compter les lignes:" | ||
1095 | read -p 'Fichier: ' file | ||
1096 | |||
1097 | numline=0 | ||
1098 | |||
1099 | if [ ! -e $file ] || [ -z $file ] | ||
1100 | then | ||
1101 | echo "Erreur: le fichier $file n'existe pas." | ||
1102 | exit 1 | ||
1103 | else | ||
1104 | while read line | ||
1105 | # 'let' permet de poser des opérations arithmétiques; | ||
1106 | # à la place, on aurait pu écrire: do ((++numline)) | ||
1107 | do let "numline = numline + 1" | ||
1108 | done < $file | ||
1109 | fi | ||
1110 | |||
1111 | if [ $numline -le 1 ] | ||
1112 | then | ||
1113 | echo "Votre fichier $file compte $numline ligne." | ||
1114 | else | ||
1115 | echo "Votre fichier $file compte $numline lignes." | ||
1116 | fi | ||
1117 | \end{minted} | ||
1118 | \captionof{listing}{bash: \texttt{while}\label{lst:countlines}} | ||
1119 | |||
1120 | \paragraph{read} | ||
1121 | \label{ref:read-plus}\index[cmds]{read|textbf} | ||
1122 | On a déjà présenté plus haut \vpageref{ref:read} cette | ||
1123 | instruction. Pour bien comprendre le \cref{lst:countlines}, il faut | ||
1124 | savoir que la fonction de \verb|read| est de \emph{lire une ligne}, | ||
1125 | quelle que soit cette ligne, depuis l'entrée standard du \emph{shell} | ||
1126 | (en anglais: \emph{standard input}). Dans le \vref{lst:case}, la ligne | ||
1127 | en question était donc constituée d'une saisie au clavier dans | ||
1128 | laquelle la ligne était formée par une chaîne de caractères terminée | ||
1129 | par un \emph{retour charriot} (\emph{carriage return}). | ||
1130 | |||
1131 | Étudions de près les lignes~13--17 du \cref{lst:countlines}: | ||
1132 | l'instruction \verb|while| (l.~13) se termine à la ligne~17 par | ||
1133 | \verb|done|. Et aussitôt à ce moment, | ||
1134 | \href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L749}{l'opérateur | ||
1135 | de redirection} \mintinline{bash}|<| lit le contenu du fichier dont | ||
1136 | le nom correspond à la variable \verb|file| et le passe en argument à | ||
1137 | la boucle \verb|while ... done|. | ||
1138 | |||
1139 | \paragraph{Commentaire du \cref{lst:countlines}} | ||
1140 | \begin{enumerate} | ||
1141 | \item À la ligne~6, on crée une variable \verb|numline| à laquelle | ||
1142 | on attribue la valeur \verb|0|. Elle servira donc de compteur. | ||
1143 | \item L'instruction essentielle est à la ligne~13: | ||
1144 | \mintinline{bash}|while read line|: comme ce qui suit \verb|while| | ||
1145 | \emph{est un test}, ce test donnera un résultat positif aussi | ||
1146 | longtemps que la variable \verb|line| existe, c'est-à-dire aussi | ||
1147 | longtemps que l'opérateur de redirection \mintinline{bash}|<| de la | ||
1148 | ligne~17 envoie des lignes terminées par un retour charriot. Tant | ||
1149 | que cette condition est remplie, la commande de la ligne~16 sera | ||
1150 | exécutée, et le compteur de lignes sera incrémenté d'une unité à | ||
1151 | chaque fois. | ||
1152 | \item Les instructions des lignes~20--25 sont faciles à | ||
1153 | suivre. Étudiez-les à l'aide du \vref{tab:tests}: vous pourrez | ||
1154 | comprendre comment la programmation peut être adaptée pour suivre | ||
1155 | les règles de l'orthographe française. | ||
1156 | \end{enumerate} | ||
1157 | |||
1158 | Exécutons maintenant le script: | ||
1159 | \begin{minted}{text} | ||
1160 | [robert@kiddo courses]$ ./countlines.sh | ||
1161 | Entrez le nom du fichier dont vous voulez compter les lignes: | ||
1162 | Fichier: whack | ||
1163 | Erreur: le fichier whack n'existe pas. | ||
1164 | [robert@kiddo courses]$ ./countlines.sh | ||
1165 | Entrez le nom du fichier dont vous voulez compter les lignes: | ||
1166 | Fichier: makefile | ||
1167 | Votre fichier makefile compte 17 lignes. | ||
1168 | \end{minted} | ||
1169 | |||
1170 | |||
1082 | \hfill\verb|../..| à suivre | 1171 | \hfill\verb|../..| à suivre |
1083 | 1172 | ||
1084 | \printindex[cmds] | 1173 | \printindex[cmds] |
1085 | \end{document} | 1174 | \end{document} |
1175 | |||
1176 | \item \verb|<| lit le contenu du fichier dont le nom suit et le passe | ||
1177 | en argument à la commande qui précède pour traitement. \ No newline at end of file | ||