aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Alessi <alessi@robertalessi.net>2018-09-25 16:15:50 +0200
committerRobert Alessi <alessi@robertalessi.net>2018-09-25 16:15:50 +0200
commita67cdf7e5a77d115192b358b707460cc85e64762 (patch)
tree4241b0a0369ae1cc1ce1931768bf86c5da3246e7
parenta1d88aa56f6b32e46b08f70f7634803e17d45564 (diff)
downloadcourses-a67cdf7e5a77d115192b358b707460cc85e64762.tar.gz
use hypertarget to set anchors
-rw-r--r--_preamble.tex15
-rw-r--r--fichiers/01-ligne-de-commande.tex79
-rw-r--r--fichiers/03-grep-bash.tex110
3 files changed, 119 insertions, 85 deletions
diff --git a/_preamble.tex b/_preamble.tex
index 4d4218f..682ea4a 100644
--- a/_preamble.tex
+++ b/_preamble.tex
@@ -13,8 +13,23 @@
13\usepackage{graphicx} 13\usepackage{graphicx}
14\graphicspath{{images/}} 14\graphicspath{{images/}}
15 15
16\usepackage{filecontents}
17\begin{filecontents*}{\jobname.ist}
18headings_flag 1
19heading_prefix
20"\\par\\penalty-50\\textbf{"
21heading_suffix
22"}\\\\\*\~\\\\\*"
23symhead_positive "Extensions"
24symhead_negative "extensions"
25numhead_positive "Numbers"
26numhead_negative "numbers"
27delim_0 ",\~"
28\end{filecontents*}
29
16\usepackage[french]{varioref} 30\usepackage[french]{varioref}
17\usepackage{imakeidx} 31\usepackage{imakeidx}
32\usepackage{xparse}
18 33
19\usepackage[unicode=true]{hyperref} 34\usepackage[unicode=true]{hyperref}
20\hypersetup{colorlinks,allcolors=blue,linktocpage} 35\hypersetup{colorlinks,allcolors=blue,linktocpage}
diff --git a/fichiers/01-ligne-de-commande.tex b/fichiers/01-ligne-de-commande.tex
index 0c2511d..66cfdce 100644
--- a/fichiers/01-ligne-de-commande.tex
+++ b/fichiers/01-ligne-de-commande.tex
@@ -10,7 +10,12 @@
10\setmintedinline{bgcolor=Lavender} 10\setmintedinline{bgcolor=Lavender}
11\usepackage{soul} 11\usepackage{soul}
12\makeindex[name=cmds, intoc, title={Liste des commandes et 12\makeindex[name=cmds, intoc, title={Liste des commandes et
13 instructions}] 13 instructions}, options={-s \jobname.ist}]
14
15\NewDocumentCommand{\commande}{s m O{}}{
16 \IfBooleanTF{#1}{\index[cmds]{#2@\texttt{#2}|#3textbf}}
17 {\index[cmds]{#2@\texttt{#2}#3}}
18}
14 19
15\begin{document} 20\begin{document}
16\maketitle 21\maketitle
@@ -50,10 +55,10 @@ Pour réaliser les mêmes opérations à la ligne de commande, il aurait
50fallu saisir les lignes suivantes: 55fallu saisir les lignes suivantes:
51\begin{enumerate} 56\begin{enumerate}
52\item création du dossier \emph{travail}:\\ 57\item création du dossier \emph{travail}:\\
53 \index[cmds]{mkdir}\mintinline{text}{mkdir travail} 58 \commande{mkdir}\mintinline{text}{mkdir travail}
54\item déplacement du fichier \emph{exemple.pdf} dans le dossier 59\item déplacement du fichier \emph{exemple.pdf} dans le dossier
55 travail: \\ 60 travail: \\
56 \index[cmds]{mv}\mintinline{text}{mv exemple.pdf travail} 61 \commande{mv}\mintinline{text}{mv exemple.pdf travail}
57\end{enumerate} 62\end{enumerate}
58 63
59\paragraph{Commentaire} 64\paragraph{Commentaire}
@@ -228,7 +233,7 @@ pour le moment:
228\label{sec:prem-comm} 233\label{sec:prem-comm}
229 234
230\paragraph{pwd} 235\paragraph{pwd}
231\label{sec:pwd}\index[cmds]{pwd|textbf} 236\label{sec:pwd}\commande*{pwd}
232Signifie \emph{print working directory}. Cette commande vous retourne 237Signifie \emph{print working directory}. Cette commande vous retourne
233tout simplement le chemin d'accès absolu du répertoire dans lequel 238tout simplement le chemin d'accès absolu du répertoire dans lequel
234vous vous trouvez. Très utile pour ne pas se perdre! Exemple: 239vous vous trouvez. Très utile pour ne pas se perdre! Exemple:
@@ -263,7 +268,7 @@ vous vous trouvez. Très utile pour ne pas se perdre! Exemple:
263\end{quoting} 268\end{quoting}
264 269
265\paragraph{mv} 270\paragraph{mv}
266\label{sec:mv}\index[cmds]{mv|textbf} 271\label{sec:mv}\commande*{mv}
267Signifie \emph{move}. Cette commande déplace les fichiers d'un endroit 272Signifie \emph{move}. Cette commande déplace les fichiers d'un endroit
268vers un autre. La syntaxe est la suivante: 273vers un autre. La syntaxe est la suivante:
269\begin{minted}[showspaces]{text} 274\begin{minted}[showspaces]{text}
@@ -293,10 +298,10 @@ Utilisation de raccourcis:
293\end{minted} 298\end{minted}
294 299
295\paragraph{cp} 300\paragraph{cp}
296\label{sec:cp}\index[cmds]{cp|textbf} 301\label{sec:cp}\commande*{cp}
297Signifie \emph{copy}. Cette commande copie des fichiers depuis un 302Signifie \emph{copy}. Cette commande copie des fichiers depuis un
298endroit vers un autre. La syntaxe est comparable à celle de la 303endroit vers un autre. La syntaxe est comparable à celle de la
299séquence \index[cmds]{mv}\mintinline{text}{mv}. 304séquence \commande{mv}\mintinline{text}{mv}.
300\begin{minted}[showspaces]{text} 305\begin{minted}[showspaces]{text}
301cp <source> <destination> 306cp <source> <destination>
302\end{minted} 307\end{minted}
@@ -321,7 +326,7 @@ Utilisation de raccourcis:
321\end{minted} 326\end{minted}
322 327
323\paragraph{cd} 328\paragraph{cd}
324\label{sec:cd}\index[cmds]{cd|textbf} 329\label{sec:cd}\commande*{cd}
325Signifie \emph{change directory}. Permet de changer de répertoire 330Signifie \emph{change directory}. Permet de changer de répertoire
326courant, par exemple pour travailler sur les fichiers d'un répertoire 331courant, par exemple pour travailler sur les fichiers d'un répertoire
327différent de son \emph{home directory}. La syntaxe est la suivante: 332différent de son \emph{home directory}. La syntaxe est la suivante:
@@ -338,7 +343,7 @@ Exemple: changement vers le répertoire \mintinline{text}|/usr/bin|:
338 Remarquez le changement de l'invite après l'exécution de la 343 Remarquez le changement de l'invite après l'exécution de la
339 commande. L'invite nous donne l'indication du nouveau répertoire. 344 commande. L'invite nous donne l'indication du nouveau répertoire.
340\end{quoting} 345\end{quoting}
341Confirmation par la commande \index[cmds]{pwd}\mintinline{text}{pwd}: 346Confirmation par la commande \commande{pwd}\mintinline{text}{pwd}:
342\begin{minted}{text} 347\begin{minted}{text}
343[robert@kiddo /usr/bin]$ pwd 348[robert@kiddo /usr/bin]$ pwd
344/usr/bin 349/usr/bin
@@ -350,7 +355,7 @@ Confirmation par la commande \index[cmds]{pwd}\mintinline{text}{pwd}:
350\end{quoting} 355\end{quoting}
351 356
352\paragraph{ls} 357\paragraph{ls}
353\label{sec:ls}\index[cmds]{ls|(textbf} 358\label{sec:ls}\commande*{ls}[(]
354Signifie \emph{list}. Affiche à l'écran tous les fichiers et les 359Signifie \emph{list}. Affiche à l'écran tous les fichiers et les
355répertoires contenus dans un répertoire donné. Si on ne précise pas le 360répertoires contenus dans un répertoire donné. Si on ne précise pas le
356répertoire dont il faut lister les fichiers, la commande liste les 361répertoire dont il faut lister les fichiers, la commande liste les
@@ -443,8 +448,9 @@ valeurs que celles qui sont commentées ci-dessous sont possibles.
443 \item \mintinline{text}|d| pour les répertoires; 448 \item \mintinline{text}|d| pour les répertoires;
444 \item \mintinline{text}|l| pour les liens. 449 \item \mintinline{text}|l| pour les liens.
445 \end{itemize} 450 \end{itemize}
446\item Permissions données au propriétaire. Il y a trois types de 451\item \hypertarget{lnk_permissions}{Permissions} données au
447 permissions que vous devez connaître ici: 452 propriétaire. Il y a trois types de permissions que vous devez
453 connaître ici:
448 \begin{itemize} 454 \begin{itemize}
449 \item \mintinline{text}|-|: aucune permission; 455 \item \mintinline{text}|-|: aucune permission;
450 \item \mintinline{text}|r|: permission en lecture; 456 \item \mintinline{text}|r|: permission en lecture;
@@ -483,7 +489,7 @@ valeurs que celles qui sont commentées ci-dessous sont possibles.
483 dernière fois. 489 dernière fois.
484\item Le nom du fichier. 490\item Le nom du fichier.
485\end{enumerate} 491\end{enumerate}
486\index[cmds]{ls|)} 492\commande*{ls}[)]
487 493
488\chapter{Bash, le shell} 494\chapter{Bash, le shell}
489\label{cha:bash-le-shell} 495\label{cha:bash-le-shell}
@@ -513,7 +519,7 @@ que l'on saura que \verb+fichier.png+ est un fichier image.
513cas de l'extension mais regarde directement à l'intérieur de chaque 519cas de l'extension mais regarde directement à l'intérieur de chaque
514fichier pour en déterminer le type. 520fichier pour en déterminer le type.
515 521
516\paragraph{file}\index[cmds]{file|textbf} 522\paragraph{file}\commande*{file}
517La commande \mintinline{text}|file| permet de tout savoir sur les 523La commande \mintinline{text}|file| permet de tout savoir sur les
518types de fichiers. Nous pouvons la lancer sur la racine de notre dépôt 524types de fichiers. Nous pouvons la lancer sur la racine de notre dépôt
519Git: 525Git:
@@ -576,7 +582,8 @@ interprété comme une suite distincte de trois arguments:
576Et le \emph{shell} ne pourra pas le trouver. Il y a deux solutions 582Et le \emph{shell} ne pourra pas le trouver. Il y a deux solutions
577possibles: 583possibles:
578\begin{enumerate}\label{ref:guillemets-simples-intro} 584\begin{enumerate}\label{ref:guillemets-simples-intro}
579\item Placer le nom du fichier entre guillemets simples: 585\item Placer le nom du fichier entre
586 \hypertarget{lnk_guillemets}{guillemets} simples:
580\begin{minted}{text} 587\begin{minted}{text}
581[robert@kiddo courses]$ ls 'photos de vacances.zip' 588[robert@kiddo courses]$ ls 'photos de vacances.zip'
582'photos de vacances.zip' 589'photos de vacances.zip'
@@ -603,7 +610,7 @@ possibles:
603Tout fichier dont le nom commence par un point (\mintinline{text}|.|) 610Tout fichier dont le nom commence par un point (\mintinline{text}|.|)
604est considéré comme un fichier caché. Le plus souvent, les fichiers 611est considéré comme un fichier caché. Le plus souvent, les fichiers
605cachés contiennent des paramètres de configuration. La commande 612cachés contiennent des paramètres de configuration. La commande
606\index[cmds]{ls}\mintinline{text}|ls| est capable de les afficher si 613\commande{ls}\mintinline{text}|ls| est capable de les afficher si
607on lui passe l'option \mintinline{text}|-a| pour 614on lui passe l'option \mintinline{text}|-a| pour
608\emph{all}. Appliquons cette option sur notre dépôt Git: 615\emph{all}. Appliquons cette option sur notre dépôt Git:
609\begin{minted}[escapeinside=||,linenos]{text} 616\begin{minted}[escapeinside=||,linenos]{text}
@@ -631,7 +638,7 @@ ligne~7 un fichier caché.
631Ces commandes s'ajoutent à celles qui sont décrites plus haut 638Ces commandes s'ajoutent à celles qui sont décrites plus haut
632(\vref{sec:prem-comm}). 639(\vref{sec:prem-comm}).
633 640
634\paragraph{mkdir}\index[cmds]{mkdir|textbf} 641\paragraph{mkdir}\commande*{mkdir}
635Sert à créer un nouveau répertoire. L'option \mintinline{text}|-p| 642Sert à créer un nouveau répertoire. L'option \mintinline{text}|-p|
636peut-être utilisée si l'on veut créer d'un coup un répertoire et un ou 643peut-être utilisée si l'on veut créer d'un coup un répertoire et un ou
637plusieurs sous-répertoires. L'option \mintinline{text}|-v|, pour 644plusieurs sous-répertoires. L'option \mintinline{text}|-v|, pour
@@ -643,19 +650,19 @@ mkdir: création du répertoire 'sandbox'
643mkdir: création du répertoire 'sandbox/robert' 650mkdir: création du répertoire 'sandbox/robert'
644\end{minted} 651\end{minted}
645 652
646\paragraph{touch}\index[cmds]{touch|textbf} 653\paragraph{touch}\commande*{touch}
647Sert à créer un fichier vide dont le nom est passé en argument. Cette 654Sert à créer un fichier vide dont le nom est passé en argument. Cette
648commande sert également à modifier les métadonnées de temps associées 655commande sert également à modifier les métadonnées de temps associées
649aux fichiers (date de création et/ou de modification). 656aux fichiers (date de création et/ou de modification).
650 657
651L'exemple suivant montre comment créer un nouveau dossier dans lequel 658L'exemple suivant montre comment créer un nouveau dossier dans lequel
652on crée également un fichier vide \verb|fichier.txt|. Ensuite, on 659on crée également un fichier vide \verb|fichier.txt|. Ensuite, on
653utilise la commande \index[cmds]{mv}\verb|mv| pour \emph{déplacer} ce 660utilise la commande \commande{mv}\verb|mv| pour \emph{déplacer} ce
654fichier vers un autre fichier \verb|fichier-mk2.txt| au même 661fichier vers un autre fichier \verb|fichier-mk2.txt| au même
655endroit. Le résultat de cette action particulière, le 662endroit. Le résultat de cette action particulière, le
656\emph{déplacement au même endroit}, est tout simplement de renommer le 663\emph{déplacement au même endroit}, est tout simplement de renommer le
657fichier. Enfin, la commande % 664fichier. Enfin, la commande %
658\index[cmds]{ls}\verb|ls -l| sert de moyen de contrôle: 665\commande{ls}\verb|ls -l| sert de moyen de contrôle:
659\begin{minted}{text} 666\begin{minted}{text}
660[robert@kiddo courses]$ mkdir -pv sandbox 667[robert@kiddo courses]$ mkdir -pv sandbox
661mkdir: création du répertoire 'sandbox' 668mkdir: création du répertoire 'sandbox'
@@ -669,7 +676,7 @@ total 0
669\subsection{Commandes destructives} 676\subsection{Commandes destructives}
670\label{sec:comm-destr} 677\label{sec:comm-destr}
671 678
672\paragraph{rm}\index[cmds]{rm|textbf} 679\paragraph{rm}\commande*{rm}
673Pour \emph{remove}. Il suffit de passer en argument à cette commande 680Pour \emph{remove}. Il suffit de passer en argument à cette commande
674ce que l'on souhaite détruire. Par défaut, cette commande ne détruit 681ce que l'on souhaite détruire. Par défaut, cette commande ne détruit
675pas les répertoires. Elle accepte une série d'options dont voici les 682pas les répertoires. Elle accepte une série d'options dont voici les
@@ -703,7 +710,7 @@ détruira absolument tout sans demande de confirmation pour ne laisser
703que les fichiers cachés du répertoire courant dont le nom commence 710que les fichiers cachés du répertoire courant dont le nom commence
704par un point. 711par un point.
705 712
706\section{Wildcards} 713\section[Wildcards]{\hypertarget{lnk_wildcards}{Wildcards}}
707\label{sec:wildcards} 714\label{sec:wildcards}
708Les \emph{wildcards}, ou \enquote{métacaractères} sont des caractères 715Les \emph{wildcards}, ou \enquote{métacaractères} sont des caractères
709ou des séquences de caractères qui servent à représenter des séries de 716ou des séquences de caractères qui servent à représenter des séries de
@@ -726,7 +733,9 @@ ls [QGH]*
726 majuscules ou minuscules. 733 majuscules ou minuscules.
727\end{itemize} 734\end{itemize}
728 735
729\section{Redirection et chaînage} 736\section[Redirection et
737chaînage]{\hypertarget{lnk_redirection}{Redirection}
738 et chaînage}
730\label{sec:redir-et-chain} 739\label{sec:redir-et-chain}
731Nous avons vu jusqu'ici que les commandes renvoient normalement leur 740Nous avons vu jusqu'ici que les commandes renvoient normalement leur
732résultat sur le terminal lui-même. On peut cependant rediriger ce que 741résultat sur le terminal lui-même. On peut cependant rediriger ce que
@@ -743,9 +752,9 @@ les commandes renvoient vers un fichier à l'aide des \emph{opérateurs
743\end{enumerate} 752\end{enumerate}
744 753
745Dans l'exemple qui suit, on demande à la commande 754Dans l'exemple qui suit, on demande à la commande
746\index[cmds]{ls}\verb|ls -l| de rediriger son résultat vers un fichier 755\commande{ls}\verb|ls -l| de rediriger son résultat vers un fichier
747\verb|all-files.txt|. On s'assure que ce fichier a bien été créé, puis 756\verb|all-files.txt|. On s'assure que ce fichier a bien été créé, puis
748on demande à la commande \index[cmds]{cat}\verb|cat| d'en afficher le 757on demande à la commande \commande{cat}\verb|cat| d'en afficher le
749contenu au terminal. Les trois commandes sont entrées aux lignes 1, 2 758contenu au terminal. Les trois commandes sont entrées aux lignes 1, 2
750et 4: 759et 4:
751\begin{minted}[escapeinside=||,linenos]{text} 760\begin{minted}[escapeinside=||,linenos]{text}
@@ -791,7 +800,7 @@ caractère \emph{pipe} (\verb+|+).
791Avant d'aller plus loin, étudions rapidement deux nouvelles commandes 800Avant d'aller plus loin, étudions rapidement deux nouvelles commandes
792qui servent à filtrer le contenu des fichiers. 801qui servent à filtrer le contenu des fichiers.
793 802
794\paragraph{head}\label{ref:head-tail}\index[cmds]{head|textbf} 803\paragraph{head}\label{ref:head-tail}\commande*{head}
795\mintinline{text}|head -<num> fichier| affiche au terminal les 804\mintinline{text}|head -<num> fichier| affiche au terminal les
796\verb|<num>| premières lignes d'un fichier. Sans l'option 805\verb|<num>| premières lignes d'un fichier. Sans l'option
797\mintinline{text}|-<num>|, les 10 premières lignes sont 806\mintinline{text}|-<num>|, les 10 premières lignes sont
@@ -803,7 +812,7 @@ affichées. Exemple:
803./_preamble.tex 812./_preamble.tex
804\end{minted} 813\end{minted}
805 814
806\paragraph{tail}\index[cmds]{tail|textbf} 815\paragraph{tail}\commande*{tail}
807\mintinline{text}|tail -<num> fichier| affiche au terminal les 816\mintinline{text}|tail -<num> fichier| affiche au terminal les
808\verb|<num>| dernières lignes d'un fichier. Sans l'option 817\verb|<num>| dernières lignes d'un fichier. Sans l'option
809\mintinline{text}|-<num>|, les 10 dernières lignes sont affichées. 818\mintinline{text}|-<num>|, les 10 dernières lignes sont affichées.
@@ -822,7 +831,7 @@ dernière ligne, \emph{mais en commençant à partir de la ligne}
822Cet exemple reprend des commandes connues. Supposons que l'on veuille 831Cet exemple reprend des commandes connues. Supposons que l'on veuille
823connaître simplement le nombre de fichiers du notre dépôt Git. Nous 832connaître simplement le nombre de fichiers du notre dépôt Git. Nous
824savons produire une liste à l'aide de la commande 833savons produire une liste à l'aide de la commande
825\index[cmds]{ls}\verb|ls -l|. Nous savons également que la commande 834\commande{ls}\verb|ls -l|. Nous savons également que la commande
826\verb|wc -l| compte les lignes. Cependant, la première ligne retournée 835\verb|wc -l| compte les lignes. Cependant, la première ligne retournée
827par la commande \verb|ls -l|, qui donne la somme des \emph{file system 836par la commande \verb|ls -l|, qui donne la somme des \emph{file system
828 blocks} occupés par le contenu du répertoire, doit être exclue du 837 blocks} occupés par le contenu du répertoire, doit être exclue du
@@ -844,15 +853,15 @@ leur contenu.
844 853
845Nous en avons étudié deux plus haut (\vpageref{ref:head-tail}): 854Nous en avons étudié deux plus haut (\vpageref{ref:head-tail}):
846\begin{enumerate} 855\begin{enumerate}
847\item \index[cmds]{head}\verb|head| qui sélectionne les premières 856\item \commande{head}\verb|head| qui sélectionne les premières
848 lignes d'un fichier. 857 lignes d'un fichier.
849\item \index[cmds]{tail}\verb|tail| qui sélectionne les dernières 858\item \commande{tail}\verb|tail| qui sélectionne les dernières
850 lignes d'un fichier. 859 lignes d'un fichier.
851\end{enumerate} 860\end{enumerate}
852 861
853On ajoutera ici les commandes suivantes: 862On ajoutera ici les commandes suivantes:
854 863
855\paragraph{cat}\index[cmds]{cat|textbf} 864\paragraph{cat}\commande*{cat}
856Affiche au terminal tout le contenu d'un fichier: 865Affiche au terminal tout le contenu d'un fichier:
857\begin{minted}{text} 866\begin{minted}{text}
858[robert@kiddo courses]$ cat ls-R 867[robert@kiddo courses]$ cat ls-R
@@ -863,7 +872,7 @@ Affiche au terminal tout le contenu d'un fichier:
863./README.tex 872./README.tex
864\end{minted} 873\end{minted}
865 874
866\paragraph{wc}\label{ref:wc}\index[cmds]{wc|textbf} 875\paragraph{wc}\label{ref:wc}\commande*{wc}
867Pour \emph{word count}. Cette commande a été utilisée plus haut une 876Pour \emph{word count}. Cette commande a été utilisée plus haut une
868fois avec l'option \verb|-l| pour compter les lignes d'un fichier 877fois avec l'option \verb|-l| pour compter les lignes d'un fichier
869(\vpageref{ref:wc-intro}). Utilisée sans option, elle retourne le 878(\vpageref{ref:wc-intro}). Utilisée sans option, elle retourne le
@@ -874,7 +883,7 @@ nombre de lignes (\verb|-l|), de mots (\verb|-w|) et de caractères
874 21 114 627 makefile 883 21 114 627 makefile
875\end{minted} 884\end{minted}
876 885
877\paragraph{cut}\index[cmds]{cut|textbf} 886\paragraph{cut}\commande*{cut}
878Permet de mettre en forme des données. Prenons l'exemple du fichier 887Permet de mettre en forme des données. Prenons l'exemple du fichier
879suivant: \\ \mintinline{text}|etudiants.txt| 888suivant: \\ \mintinline{text}|etudiants.txt|
880\begin{minted}{text} 889\begin{minted}{text}
@@ -909,7 +918,7 @@ forme de façon à placer le prénom avant le nom et avoir les adresses
909email entre crochets pointus? Comment faire aussi pour récupérer les 918email entre crochets pointus? Comment faire aussi pour récupérer les
910données dans un tableur? 919données dans un tableur?
911 920
912\paragraph{awk}\index[cmds]{awk|textbf} 921\paragraph{awk}\commande*{awk}
913Ce programme accessible à la ligne de commande permet d'effectuer ce 922Ce programme accessible à la ligne de commande permet d'effectuer ce
914travail facilement. Il sélectionne les données dans l'ordre que l'on 923travail facilement. Il sélectionne les données dans l'ordre que l'on
915souhaite à l'aide de variables: \verb|$1|, \verb|$2|, \verb|$3|, 924souhaite à l'aide de variables: \verb|$1|, \verb|$2|, \verb|$3|,
@@ -946,7 +955,7 @@ Hector;Pédot;<hector.pedot@ailleurs.org>
946 \end{enumerate} 955 \end{enumerate}
947\end{quoting} 956\end{quoting}
948Pour terminer, il suffit de renommer le fichier \verb|etudiants.txt| 957Pour terminer, il suffit de renommer le fichier \verb|etudiants.txt|
949en \verb|etudiants.csv| par la commande:\index[cmds]{mv} 958en \verb|etudiants.csv| par la commande:\commande{mv}
950\begin{minted}{text} 959\begin{minted}{text}
951mv etudiants.txt etudiants.csv 960mv etudiants.txt etudiants.csv
952\end{minted} 961\end{minted}
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