aboutsummaryrefslogtreecommitdiff
path: root/fichiers/03-grep-bash.tex
diff options
context:
space:
mode:
Diffstat (limited to 'fichiers/03-grep-bash.tex')
-rw-r--r--fichiers/03-grep-bash.tex110
1 files changed, 60 insertions, 50 deletions
diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex
index 291e6c9..8b9c78e 100644
--- a/fichiers/03-grep-bash.tex
+++ b/fichiers/03-grep-bash.tex
@@ -15,7 +15,12 @@
15\usepackage{capt-of} 15\usepackage{capt-of}
16\usepackage{soul} 16\usepackage{soul}
17\makeindex[name=cmds, intoc, title={Liste des commandes et 17\makeindex[name=cmds, intoc, title={Liste des commandes et
18 instructions}] 18 instructions}, options={-s \jobname.ist}]
19
20\NewDocumentCommand{\commande}{s m O{}}{
21 \IfBooleanTF{#1}{\index[cmds]{#2@\texttt{#2}|#3textbf}}
22 {\index[cmds]{#2@\texttt{#2}#3}}
23}
19 24
20\begin{document} 25\begin{document}
21\maketitle 26\maketitle
@@ -28,13 +33,13 @@
28\listoftables 33\listoftables
29 34
30\chapter{grep, les expressions régulières} 35\chapter{grep, les expressions régulières}
31\label{cha:grep-les-expressions}\index[cmds]{grep} 36\label{cha:grep-les-expressions}\commande{grep}
32Les expressions régulières se rapprochent des \emph{wildcards} ou 37Les expressions régulières se rapprochent des \emph{wildcards} ou
33\enquote{métacaractères} qui ont été présentés dans 38\enquote{métacaractères} qui ont été présentés dans
34\href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L714}{le 39\href{./01-ligne-de-commande.pdf#lnk_wildcards}{le cours sur la ligne
35 cours sur la ligne de commande}. C'est une technique commune à pour 40 de commande}. C'est une technique commune à pour ainsi dire tous les
36ainsi dire tous les langages de programmation qui permet de construire 41langages de programmation qui permet de construire des
37des \enquote{modèles}, en anglais \emph{patterns}, susceptibles de 42\enquote{modèles}, en anglais \emph{patterns}, susceptibles de
38capturer des chaînes de caractères. 43capturer des chaînes de caractères.
39 44
40Par exemple, soit le fichier suivant: 45Par exemple, soit le fichier suivant:
@@ -113,7 +118,8 @@ symboles suivants\footnote{Cette liste n'est pas exhaustive.}:
113\end{xltabular} 118\end{xltabular}
114 119
115\paragraph{grep, egrep} 120\paragraph{grep, egrep}
116\index[cmds]{grep|textbf}\index[cmds]{egrep|see{grep}} 121\commande*{grep}
122\commande{egrep}[|see{\texttt{grep}}]
117À la place de \verb|grep|, on peut saisir à la ligne de commande 123À la place de \verb|grep|, on peut saisir à la ligne de commande
118\verb|egrep| ou \verb|grep -E| pour \emph{extended regular 124\verb|egrep| ou \verb|grep -E| pour \emph{extended regular
119 expressions}. Quelle est la différence? Retenez ici simplement que 125 expressions}. Quelle est la différence? Retenez ici simplement que
@@ -144,8 +150,9 @@ d'options. Parmi ces options, retenons celles-ci:
144\end{description} 150\end{description}
145 151
146\paragraph{Exemples} 152\paragraph{Exemples}
147Les exemples ci-dessous utilisent \href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L737}{la 153Les exemples ci-dessous utilisent
148 technique de la redirection}. 154\href{./01-ligne-de-commande.pdf#lnk_redirection}{la technique de la
155 redirection}.
149\begin{minted}{text} 156\begin{minted}{text}
150[robert@kiddo courses]$ cat /usr/share/dict/cracklib-small | grep '\<s.*m\>' | grep 'ea' 157[robert@kiddo courses]$ cat /usr/share/dict/cracklib-small | grep '\<s.*m\>' | grep 'ea'
151scream 158scream
@@ -354,7 +361,7 @@ Pour un exemple de code commenté, voir le \vref{lst:copyten}.
354\label{sec:execution} 361\label{sec:execution}
355Il faut ici approfondir la notion de \emph{permissions} sur les 362Il faut ici approfondir la notion de \emph{permissions} sur les
356fichiers qui a été présentée dans le cours sur la 363fichiers qui a été présentée dans le cours sur la
357\href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L454}{ligne 364\href{./01-ligne-de-commande.pdf#lnk_permissions}{ligne
358 de commande}. Nous avons en effet étudié trois types de permissions 365 de commande}. Nous avons en effet étudié trois types de permissions
359sur les fichiers: en lecture, en écriture et en exécution. Revenons 366sur les fichiers: en lecture, en écriture et en exécution. Revenons
360sur les permissions données par défaut au script \verb|backup.sh|: 367sur les permissions données par défaut au script \verb|backup.sh|:
@@ -370,7 +377,7 @@ Soit:
370\end{itemize} 377\end{itemize}
371 378
372\paragraph{chmod} 379\paragraph{chmod}
373\index[cmds]{chmod|textbf} 380\commande*{chmod}
374La commande qui permet de changer les droits s'appelle 381La commande qui permet de changer les droits s'appelle
375\verb|chmod|. Pour comprendre comment l'utiliser, il faut savoir que 382\verb|chmod|. Pour comprendre comment l'utiliser, il faut savoir que
376les permissions sont traduites par des valeurs numériques, à savoir: 383les permissions sont traduites par des valeurs numériques, à savoir:
@@ -405,7 +412,7 @@ où \verb|xyz| sont les trois chiffres qui représentent les permissions.
405 \begin{enumerate} 412 \begin{enumerate}
406 \item La commande \verb|chmod| a été entrée à la ligne 1. 413 \item La commande \verb|chmod| a été entrée à la ligne 1.
407 \item À la ligne 2, nous avons lancé la commande 414 \item À la ligne 2, nous avons lancé la commande
408 \index[cmds]{ls}\mintinline{text}|ls -l --color| sur le fichier 415 \commande{ls}\mintinline{text}|ls -l --color| sur le fichier
409 \verb|backup.sh|: les droits listés à la ligne 3 montrent bien que 416 \verb|backup.sh|: les droits listés à la ligne 3 montrent bien que
410 la valeur \verb|x| a été ajoutée aux trois endroits possibles. On 417 la valeur \verb|x| a été ajoutée aux trois endroits possibles. On
411 voit enfin que l'option \verb|--color| affiche en vert les 418 voit enfin que l'option \verb|--color| affiche en vert les
@@ -451,7 +458,7 @@ _preamble_bbl.tex _preamble-ed.tex _preamble.tex README.tex
451\begin{quoting} 458\begin{quoting}
452 \textbf{Commentaire:} 459 \textbf{Commentaire:}
453 \begin{itemize} 460 \begin{itemize}
454 \item lignes 1--11: la commande \index[cmds]{ls}\verb|ls -l --color| 461 \item lignes 1--11: la commande \commande{ls}\verb|ls -l --color|
455 donne l'état du dossier \emph{avant} l'exécution du script 462 donne l'état du dossier \emph{avant} l'exécution du script
456 \verb|backup.sh|; 463 \verb|backup.sh|;
457 \item lignes 12--17: exécution du script et messages du terminal; 464 \item lignes 12--17: exécution du script et messages du terminal;
@@ -486,7 +493,7 @@ caché.
486Les variables sont des informations temporaires qui peuvent être 493Les variables sont des informations temporaires qui peuvent être
487stockées et rappelées à tout moment. L'exemple qui suit va donner 494stockées et rappelées à tout moment. L'exemple qui suit va donner
488l'occasion d'étudier une nouvelle commande, 495l'occasion d'étudier une nouvelle commande,
489\index[cmds]{echo}\verb|echo|, dont le rôle est justement de retourner 496\commande{echo}\verb|echo|, dont le rôle est justement de retourner
490au terminal la chaîne de caractères qu'on lui passe en argument: 497au terminal la chaîne de caractères qu'on lui passe en argument:
491\begin{minted}[linenos]{text} 498\begin{minted}[linenos]{text}
492[robert@kiddo courses]$ mysystem="Linux" 499[robert@kiddo courses]$ mysystem="Linux"
@@ -507,7 +514,7 @@ Mon système est Linux.
507 \end{description} 514 \end{description}
508 \begin{mdframed}[backgroundcolor=Cyan] 515 \begin{mdframed}[backgroundcolor=Cyan]
509 Observez la différence dans l'usage des guillemets! 516 Observez la différence dans l'usage des guillemets!
510 \href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L558}{Comme 517 \href{./01-ligne-de-commande.pdf#lnk_guillemets}{Comme
511 on le sait}, les guillemets servent à indiquer au \emph{shell} 518 on le sait}, les guillemets servent à indiquer au \emph{shell}
512 que les espaces ne sont pas des caractères actifs. Il y a 519 que les espaces ne sont pas des caractères actifs. Il y a
513 cependant une grande différence entre les guillemets simples et 520 cependant une grande différence entre les guillemets simples et
@@ -543,7 +550,7 @@ echo "et l'archive $backupdir.zip a été créée."
543 550
544\paragraph{read} 551\paragraph{read}
545\label{ref:read} 552\label{ref:read}
546\index[cmds]{read|textbf} Cette nouvelle commande est expliquée dans 553\commande*{read} Cette nouvelle commande est expliquée dans
547le commentaire qui suit\footnote{Voir aussi plus loin 554le commentaire qui suit\footnote{Voir aussi plus loin
548 \vpageref{ref:read-plus}.}: 555 \vpageref{ref:read-plus}.}:
549\begin{quoting} 556\begin{quoting}
@@ -605,9 +612,9 @@ précédées du signe $=$. Exemple:
605\begin{quoting} 612\begin{quoting}
606 \textbf{Commentaire:} 613 \textbf{Commentaire:}
607 \begin{enumerate} 614 \begin{enumerate}
608 \item À la ligne~1, la commande \index[cmds]{ls}\verb|ls| liste les 615 \item À la ligne~1, la commande \commande{ls}\verb|ls| liste les
609 fichiers, puis son résultat est interprété par 616 fichiers, puis son résultat est interprété par
610 \index[cmds]{wc}\verb|wc -l| qui compte le nombre de fichiers 617 \commande{wc}\verb|wc -l| qui compte le nombre de fichiers
611 retournés. 618 retournés.
612 \item La variable \verb|$nbre| contient donc ce dernier résultat. 619 \item La variable \verb|$nbre| contient donc ce dernier résultat.
613 \end{enumerate} 620 \end{enumerate}
@@ -670,20 +677,20 @@ fi
670 \begin{enumerate} 677 \begin{enumerate}
671 \item Observez la structure de la condition: 678 \item Observez la structure de la condition:
672 \begin{itemize} 679 \begin{itemize}
673 \item ligne 1: \index[cmds]{if|textbf}\mintinline{bash}|if| 680 \item ligne 1: \commande*{if}\mintinline{bash}|if|
674 $\rightarrow$ \emph{si <condition>} où la condition est posée 681 $\rightarrow$ \emph{si <condition>} où la condition est posée
675 entre crochets. Dans l'expression entre les crochets, % 682 entre crochets. Dans l'expression entre les crochets, %
676 \verb|-d "$backupdir"|, \verb|-d| signifie: \verb|$backupdir| 683 \verb|-d "$backupdir"|, \verb|-d| signifie: \verb|$backupdir|
677 existe \emph{et} est un répertoire; 684 existe \emph{et} est un répertoire;
678 \item ligne 2: \index[cmds]{then|textbf}\mintinline{bash}|then| 685 \item ligne 2: \commande*{then}\mintinline{bash}|then|
679 $\rightarrow$ \emph{alors, passez à la ligne suivante}; 686 $\rightarrow$ \emph{alors, passez à la ligne suivante};
680 \item ligne 6: \index[cmds]{else|textbf}\mintinline{bash}|else| 687 \item ligne 6: \commande*{else}\mintinline{bash}|else|
681 $\rightarrow$ \emph{autrement, passez à la ligne suivante}; 688 $\rightarrow$ \emph{autrement, passez à la ligne suivante};
682 \item ligne 8: \index[cmds]{fi|textbf}\mintinline{bash}|fi| 689 \item ligne 8: \commande*{fi}\mintinline{bash}|fi|
683 $\rightarrow$ \emph{fin de la condition} (en fait les deux 690 $\rightarrow$ \emph{fin de la condition} (en fait les deux
684 lettres de la conjonction \verb|if| écrite à l'envers). 691 lettres de la conjonction \verb|if| écrite à l'envers).
685 \end{itemize} 692 \end{itemize}
686 \item À la ligne 5, la commande \index[cmds]{exit}\verb|exit 1| 693 \item À la ligne 5, la commande \commande{exit}\verb|exit 1|
687 ordonne au programme de se terminer immédiatement et de renvoyer 694 ordonne au programme de se terminer immédiatement et de renvoyer
688 la valeur \verb|1| comme numéro d'état (\emph{status number}). Par 695 la valeur \verb|1| comme numéro d'état (\emph{status number}). Par
689 convention, \verb|0| est pour \emph{true} (le programme a bien été 696 convention, \verb|0| est pour \emph{true} (le programme a bien été
@@ -723,7 +730,7 @@ Supposons que le répertoire de sauvegarde ait été supprimé mais que
723l'archive \verb|.zip| correspondante ne l'ait pas été. Dans ce cas, le 730l'archive \verb|.zip| correspondante ne l'ait pas été. Dans ce cas, le
724script \verb|backup.sh| l'écraserait. Pour éviter cela, nous pouvons 731script \verb|backup.sh| l'écraserait. Pour éviter cela, nous pouvons
725utiliser dans le script l'instruction 732utiliser dans le script l'instruction
726\index[cmds]{elif|textbf}\verb|elif| qui permet de construire des 733\commande*{elif}\verb|elif| qui permet de construire des
727conditions en série. Littéralement, \verb|elif| est pour \emph{else 734conditions en série. Littéralement, \verb|elif| est pour \emph{else
728 if}, \enquote{ou autrement, si\ldots}. Voici donc ce qu'il faut 735 if}, \enquote{ou autrement, si\ldots}. Voici donc ce qu'il faut
729ajouter: 736ajouter:
@@ -802,14 +809,14 @@ droits comme le montre la ligne~7 du \vref{lst:if-then-else}.
802\end{xltabular} 809\end{xltabular}
803 810
804\paragraph{test} 811\paragraph{test}
805\index[cmds]{test|textbf} À l'intérieur du script \verb|bash|, les 812\commande*{test} À l'intérieur du script \verb|bash|, les
806crochets renvoient en fait à une commande par ailleurs disponible: 813crochets renvoient en fait à une commande par ailleurs disponible:
807\verb|test|. La commande \verb|test| renvoie en fait la sortie 814\verb|test|. La commande \verb|test| renvoie en fait la sortie
808\verb|0| si le résultat est \emph{vrai} et \verb|1| si le résultat est 815\verb|0| si le résultat est \emph{vrai} et \verb|1| si le résultat est
809\emph{faux}. Le terminal ne retourne pas le resultat, mais celui-ci 816\emph{faux}. Le terminal ne retourne pas le resultat, mais celui-ci
810est associé à une variable 817est associé à une variable
811\verb|$?| que l'on peut afficher par la commande: 818\verb|$?| que l'on peut afficher par la commande:
812\index[cmds]{echo}\mintinline{bash}|echo $?|. En voici quelques 819\commande{echo}\mintinline{bash}|echo $?|. En voici quelques
813exemples: 820exemples:
814\begin{minted}[linenos]{text} 821\begin{minted}[linenos]{text}
815[robert@kiddo courses]$ ls 822[robert@kiddo courses]$ ls
@@ -845,8 +852,8 @@ code différentes profondeurs de marge à gauche de façon à distinguer
845clairement des blocs logiques. Les lignes 7--20 du 852clairement des blocs logiques. Les lignes 7--20 du
846\vref{lst:if-then-else} en donnent un exemple. L'indentation permet de 853\vref{lst:if-then-else} en donnent un exemple. L'indentation permet de
847faire apparaître clairement ce qui dépend de l'instruction 854faire apparaître clairement ce qui dépend de l'instruction
848\index[cmds]{if}\verb|if| (l.~7), puis \index[cmds]{elif}\verb|elif| 855\commande{if}\verb|if| (l.~7), puis \commande{elif}\verb|elif|
849(l.~12) et enfin \index[cmds]{else}\verb|else| (l.~18). 856(l.~12) et enfin \commande{else}\verb|else| (l.~18).
850 857
851Cette technique est commune à tous les langages informatiques et tous 858Cette technique est commune à tous les langages informatiques et tous
852les programmeurs l'utilisent. En Python, que nous étudierons plus 859les programmeurs l'utilisent. En Python, que nous étudierons plus
@@ -898,7 +905,7 @@ fi
898\end{minted} 905\end{minted}
899 906
900\subsection{case} 907\subsection{case}
901\label{sec:case}\index[cmds]{case|textbf} 908\label{sec:case}\commande*{case}
902\verb|case| est une instruction qui permet d'exécuter différentes 909\verb|case| est une instruction qui permet d'exécuter différentes
903actions en fonction de la valeur d'une variable. Elle est intéressante 910actions en fonction de la valeur d'une variable. Elle est intéressante
904à étudier ici car elle fait appel à la fois à la notion de variable et 911à étudier ici car elle fait appel à la fois à la notion de variable et
@@ -951,7 +958,7 @@ esac
951 \textbf{Commentaire:} 958 \textbf{Commentaire:}
952 \begin{enumerate} 959 \begin{enumerate}
953 \item À la ligne 4, l'utilisateur est invité à entrer une 960 \item À la ligne 4, l'utilisateur est invité à entrer une
954 réponse. L'instruction \index[cmds]{read}\verb|read| associe la 961 réponse. L'instruction \commande{read}\verb|read| associe la
955 réponse à la variable \verb|animal|. 962 réponse à la variable \verb|animal|.
956 \item À la ligne 6, l'instruction \verb|case| reprend la variable 963 \item À la ligne 6, l'instruction \verb|case| reprend la variable
957 qui est donc préfixée par le signe \verb|$|. 964 qui est donc préfixée par le signe \verb|$|.
@@ -968,7 +975,7 @@ esac
968\begin{quoting} 975\begin{quoting}
969 \textbf{Remarque:} à la place de l'instruction \verb|case|, on 976 \textbf{Remarque:} à la place de l'instruction \verb|case|, on
970 recommande aujourd'hui d'utiliser une nouvelle instruction, 977 recommande aujourd'hui d'utiliser une nouvelle instruction,
971 \index[cmds]{switch}\verb|switch|, dont la syntaxe, plus complexe, 978 \commande{switch}\verb|switch|, dont la syntaxe, plus complexe,
972 n'est pas étudiée ici. 979 n'est pas étudiée ici.
973\end{quoting} 980\end{quoting}
974 981
@@ -976,11 +983,12 @@ esac
976\label{sec:boucles} 983\label{sec:boucles}
977Les boucles (en anglais: \emph{loops}) servent à indiquer qu'une série 984Les boucles (en anglais: \emph{loops}) servent à indiquer qu'une série
978d'instructions doit reprendre et continuer à s'exécuter aussi 985d'instructions doit reprendre et continuer à s'exécuter aussi
979longtemps qu'une condition donnée n'est pas remplie. 986longtemps qu'une condition donnée est remplie ou n'est pas remplie.
980 987
981Prenons un exemple simple. Nous avons dans un répertoire plusieurs 988Prenons un exemple simple. Nous avons dans un répertoire plusieurs
982centaines d'images et nous souhaitons convertir au format \verb|.png| 989centaines d'images de différents formats et nous souhaitons convertir
983toutes les images qui sont enregistrées au format \verb|.tiff|. 990au format \verb|.png| toutes les images qui sont enregistrées au
991format \verb|.tiff|.
984 992
985Pour convertir une seule image, nous pouvons utiliser l'outil en ligne 993Pour convertir une seule image, nous pouvons utiliser l'outil en ligne
986de commande \verb|convert| fourni par le programme 994de commande \verb|convert| fourni par le programme
@@ -995,10 +1003,10 @@ répertoire qui en compte des centaines enregistrées dans des formats
995différents? 1003différents?
996 1004
997\paragraph{basename} 1005\paragraph{basename}
998\index[cmds]{basename|textbf}Avant de continuer, il faut dire un mot 1006\commande*{basename}Avant de continuer, il faut dire un mot de la
999de la commande \verb|basename| que nous allons utiliser ici. Cette 1007commande \verb|basename| que nous allons utiliser ici. Cette commande
1000commande permet de dépouiller un nom de fichier de son chemin d'accès 1008permet de dépouiller un nom de fichier de son chemin d'accès et de son
1001et de son extension. La syntaxe est la suivante: 1009extension. La syntaxe est la suivante:
1002\begin{minted}[escapeinside=||]{text} 1010\begin{minted}[escapeinside=||]{text}
1003basename -s .|\emph{ext}| |\emph{file}| 1011basename -s .|\emph{ext}| |\emph{file}|
1004\end{minted} 1012\end{minted}
@@ -1021,14 +1029,15 @@ total 252
1021\end{minted} 1029\end{minted}
1022 1030
1023\paragraph{for-do-done} 1031\paragraph{for-do-done}
1024\index[cmds]{for|textbf}\index[cmds]{do|textbf}\index[cmds]{done|textbf} 1032\commande*{for}\commande*{do}\commande*{done}
1025La boucle que nous allons utiliser fait appel à trois instructions: 1033La boucle que nous allons utiliser fait appel à trois instructions:
1026\begin{enumerate} 1034\begin{enumerate}
1027\item \verb|for| prend comme argument un nom qui sera ensuite traité 1035\item \verb|for| prend comme argument un nom qui sera ensuite traité
1028 comme une variable. Le nom de la variable est suivi de l'instruction 1036 comme une variable. Le nom de la variable est suivi de l'instruction
1029 \verb|in| et d'un nom de fichier qui contient des données séparées 1037 \commande{in}\verb|in| et d'un nom de fichier qui contient des
1030 par des espaces ou bien d'une expression dans laquelle on a placé 1038 données séparées par des espaces ou bien d'une expression dans
1031 des \emph{wildcards}. 1039 laquelle on a placé des
1040 \href{./01-ligne-de-commande.pdf#lnk_wildcards}{\emph{wildcards}}.
1032\item \verb|do| est suivi des commandes qu'il faut exécuter sur chaque 1041\item \verb|do| est suivi des commandes qu'il faut exécuter sur chaque
1033 élément retourné par l'instruction \verb|for| \ldots{} \verb|in|. 1042 élément retourné par l'instruction \verb|for| \ldots{} \verb|in|.
1034\item \verb|done| marque la fin de la boucle. 1043\item \verb|done| marque la fin de la boucle.
@@ -1068,7 +1077,7 @@ done
1068\end{quoting} 1077\end{quoting}
1069 1078
1070\paragraph{while} 1079\paragraph{while}
1071\index[cmds]{while|textbf} L'expression \verb|while| exécute les 1080\commande*{while} L'expression \verb|while| exécute les
1072lignes de code qui suivent aussi longtemps qu'un test donné retourne 1081lignes de code qui suivent aussi longtemps qu'un test donné retourne
1073un résultat positif (\enquote{vrai}, en anglais \emph{true}). Le 1082un résultat positif (\enquote{vrai}, en anglais \emph{true}). Le
1074script \verb|countlines.sh|, donné dans le \cref{lst:countlines} 1083script \verb|countlines.sh|, donné dans le \cref{lst:countlines}
@@ -1105,7 +1114,7 @@ fi
1105\captionof{listing}{bash: \texttt{while}\label{lst:countlines}} 1114\captionof{listing}{bash: \texttt{while}\label{lst:countlines}}
1106 1115
1107\paragraph{read} 1116\paragraph{read}
1108\label{ref:read-plus}\index[cmds]{read|textbf} 1117\label{ref:read-plus}\commande*{read}
1109On a déjà présenté plus haut \vpageref{ref:read} cette 1118On a déjà présenté plus haut \vpageref{ref:read} cette
1110instruction. Pour bien comprendre le \cref{lst:countlines}, il faut 1119instruction. Pour bien comprendre le \cref{lst:countlines}, il faut
1111savoir que la fonction de \verb|read| est de \emph{lire une ligne}, 1120savoir que la fonction de \verb|read| est de \emph{lire une ligne},
@@ -1128,7 +1137,7 @@ par un \emph{retour charriot} (\emph{carriage return}).
1128Étudions de près les lignes~13--17 du \cref{lst:countlines}: 1137Étudions de près les lignes~13--17 du \cref{lst:countlines}:
1129l'instruction \verb|while| (l.~13) se termine à la ligne~17 par 1138l'instruction \verb|while| (l.~13) se termine à la ligne~17 par
1130\verb|done|. Et aussitôt à ce moment, 1139\verb|done|. Et aussitôt à ce moment,
1131\href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L749}{l'opérateur 1140\href{./01-ligne-de-commande.pdf#lnk_redirection}{l'opérateur
1132 de redirection} \mintinline{bash}|<| lit le contenu du fichier dont 1141 de redirection} \mintinline{bash}|<| lit le contenu du fichier dont
1133le nom correspond à la variable \verb|file| et le passe en argument à 1142le nom correspond à la variable \verb|file| et le passe en argument à
1134la boucle \verb|while ... done|. 1143la boucle \verb|while ... done|.
@@ -1165,7 +1174,7 @@ Votre fichier makefile compte 21 lignes.
1165\end{minted} 1174\end{minted}
1166 1175
1167\paragraph{until} 1176\paragraph{until}
1168\index[cmds]{until|textbf}À la différence de \verb|while|, 1177\commande*{until}À la différence de \verb|while|,
1169\verb|until| exécute les instructions qui suivent jusqu'au moment où 1178\verb|until| exécute les instructions qui suivent jusqu'au moment où
1170le résultat du test associé à \verb|until| devient \emph{positif} 1179le résultat du test associé à \verb|until| devient \emph{positif}
1171(\emph{true}). Pour prendre un exemple très simple, le script suivant, 1180(\emph{true}). Pour prendre un exemple très simple, le script suivant,
@@ -1192,8 +1201,8 @@ done
1192 \textbf{Commentaire:} 1201 \textbf{Commentaire:}
1193 \begin{enumerate} 1202 \begin{enumerate}
1194 \item La condition posée à la ligne~8 se comprend ainsi: 1203 \item La condition posée à la ligne~8 se comprend ainsi:
1195 \enquote{faites ce qui suit jusqu'à ce que le compteurs de 1204 \enquote{faites ce qui suit jusqu'à ce que le compteur de
1196 rugissements atteingne une valeur supérieure à celle définie par 1205 rugissements atteigne une valeur supérieure à celle définie par
1197 l'utilisateur. Si la valeur est supérieure, sortez de la boucle.} 1206 l'utilisateur. Si la valeur est supérieure, sortez de la boucle.}
1198\item À la ligne~11, on demande à \emph{bash} d'attendre une seconde. 1207\item À la ligne~11, on demande à \emph{bash} d'attendre une seconde.
1199\item À la ligne~12, on incrémente de 1 la valeur du compteur de 1208\item À la ligne~12, on incrémente de 1 la valeur du compteur de
@@ -1213,7 +1222,7 @@ Raaaaaaaaahhhhhhhhhhhh! (3)
1213\end{minted} 1222\end{minted}
1214 1223
1215\paragraph{break} 1224\paragraph{break}
1216\index[cmds]{break|textbf} \verb|break| est une instruction qui 1225\commande*{break} \verb|break| est une instruction qui
1217ordonne de quitter immédiatement la boucle dans laquelle on se 1226ordonne de quitter immédiatement la boucle dans laquelle on se
1218trouve. Supposons par exemple que l'on écrive un programme dans lequel 1227trouve. Supposons par exemple que l'on écrive un programme dans lequel
1219on souhaite limiter une action telle que la copie de 1228on souhaite limiter une action telle que la copie de
@@ -1288,7 +1297,7 @@ Terminé. 10 fichiers au maximum ont été copiés dans Houba.
1288\end{minted} 1297\end{minted}
1289 1298
1290\paragraph{continue} 1299\paragraph{continue}
1291\index[cmds]{continue|textbf} À l'inverse de \verb|break|, 1300\commande*{continue} À l'inverse de \verb|break|,
1292\verb|continue| demande à \emph{bash} d'interrompre l'itération 1301\verb|continue| demande à \emph{bash} d'interrompre l'itération
1293courante mais sans quitter la boucle, puis de reprendre la boucle à 1302courante mais sans quitter la boucle, puis de reprendre la boucle à
1294partir de l'itération suivante. C'est une façon de prévoir des 1303partir de l'itération suivante. C'est une façon de prévoir des
@@ -1417,6 +1426,7 @@ if [ $numline -le 1 ]
1417 echo "Votre fichier $file compte $numline lignes." 1426 echo "Votre fichier $file compte $numline lignes."
1418fi 1427fi
1419\end{minted} 1428\end{minted}
1429\enlargethispage{2\baselineskip}
1420\captionof{listing}{bash: exemple de 1430\captionof{listing}{bash: exemple de
1421 fonction\label{lst:countlines-mk2}} 1431 fonction\label{lst:countlines-mk2}}
1422 1432