From a67cdf7e5a77d115192b358b707460cc85e64762 Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Tue, 25 Sep 2018 16:15:50 +0200 Subject: use hypertarget to set anchors --- _preamble.tex | 15 ++++++ fichiers/01-ligne-de-commande.tex | 79 +++++++++++++++------------ fichiers/03-grep-bash.tex | 110 +++++++++++++++++++++----------------- 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 @@ \usepackage{graphicx} \graphicspath{{images/}} +\usepackage{filecontents} +\begin{filecontents*}{\jobname.ist} +headings_flag 1 +heading_prefix +"\\par\\penalty-50\\textbf{" +heading_suffix +"}\\\\\*\~\\\\\*" +symhead_positive "Extensions" +symhead_negative "extensions" +numhead_positive "Numbers" +numhead_negative "numbers" +delim_0 ",\~" +\end{filecontents*} + \usepackage[french]{varioref} \usepackage{imakeidx} +\usepackage{xparse} \usepackage[unicode=true]{hyperref} \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 @@ \setmintedinline{bgcolor=Lavender} \usepackage{soul} \makeindex[name=cmds, intoc, title={Liste des commandes et - instructions}] + instructions}, options={-s \jobname.ist}] + +\NewDocumentCommand{\commande}{s m O{}}{ + \IfBooleanTF{#1}{\index[cmds]{#2@\texttt{#2}|#3textbf}} + {\index[cmds]{#2@\texttt{#2}#3}} +} \begin{document} \maketitle @@ -50,10 +55,10 @@ Pour réaliser les mêmes opérations à la ligne de commande, il aurait fallu saisir les lignes suivantes: \begin{enumerate} \item création du dossier \emph{travail}:\\ - \index[cmds]{mkdir}\mintinline{text}{mkdir travail} + \commande{mkdir}\mintinline{text}{mkdir travail} \item déplacement du fichier \emph{exemple.pdf} dans le dossier travail: \\ - \index[cmds]{mv}\mintinline{text}{mv exemple.pdf travail} + \commande{mv}\mintinline{text}{mv exemple.pdf travail} \end{enumerate} \paragraph{Commentaire} @@ -228,7 +233,7 @@ pour le moment: \label{sec:prem-comm} \paragraph{pwd} -\label{sec:pwd}\index[cmds]{pwd|textbf} +\label{sec:pwd}\commande*{pwd} Signifie \emph{print working directory}. Cette commande vous retourne tout simplement le chemin d'accès absolu du répertoire dans lequel vous 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: \end{quoting} \paragraph{mv} -\label{sec:mv}\index[cmds]{mv|textbf} +\label{sec:mv}\commande*{mv} Signifie \emph{move}. Cette commande déplace les fichiers d'un endroit vers un autre. La syntaxe est la suivante: \begin{minted}[showspaces]{text} @@ -293,10 +298,10 @@ Utilisation de raccourcis: \end{minted} \paragraph{cp} -\label{sec:cp}\index[cmds]{cp|textbf} +\label{sec:cp}\commande*{cp} Signifie \emph{copy}. Cette commande copie des fichiers depuis un endroit vers un autre. La syntaxe est comparable à celle de la -séquence \index[cmds]{mv}\mintinline{text}{mv}. +séquence \commande{mv}\mintinline{text}{mv}. \begin{minted}[showspaces]{text} cp \end{minted} @@ -321,7 +326,7 @@ Utilisation de raccourcis: \end{minted} \paragraph{cd} -\label{sec:cd}\index[cmds]{cd|textbf} +\label{sec:cd}\commande*{cd} Signifie \emph{change directory}. Permet de changer de répertoire courant, par exemple pour travailler sur les fichiers d'un répertoire diffé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|: Remarquez le changement de l'invite après l'exécution de la commande. L'invite nous donne l'indication du nouveau répertoire. \end{quoting} -Confirmation par la commande \index[cmds]{pwd}\mintinline{text}{pwd}: +Confirmation par la commande \commande{pwd}\mintinline{text}{pwd}: \begin{minted}{text} [robert@kiddo /usr/bin]$ pwd /usr/bin @@ -350,7 +355,7 @@ Confirmation par la commande \index[cmds]{pwd}\mintinline{text}{pwd}: \end{quoting} \paragraph{ls} -\label{sec:ls}\index[cmds]{ls|(textbf} +\label{sec:ls}\commande*{ls}[(] Signifie \emph{list}. Affiche à l'écran tous les fichiers et les répertoires contenus dans un répertoire donné. Si on ne précise pas le ré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. \item \mintinline{text}|d| pour les répertoires; \item \mintinline{text}|l| pour les liens. \end{itemize} -\item Permissions données au propriétaire. Il y a trois types de - permissions que vous devez connaître ici: +\item \hypertarget{lnk_permissions}{Permissions} données au + propriétaire. Il y a trois types de permissions que vous devez + connaître ici: \begin{itemize} \item \mintinline{text}|-|: aucune permission; \item \mintinline{text}|r|: permission en lecture; @@ -483,7 +489,7 @@ valeurs que celles qui sont commentées ci-dessous sont possibles. dernière fois. \item Le nom du fichier. \end{enumerate} -\index[cmds]{ls|)} +\commande*{ls}[)] \chapter{Bash, le shell} \label{cha:bash-le-shell} @@ -513,7 +519,7 @@ que l'on saura que \verb+fichier.png+ est un fichier image. cas de l'extension mais regarde directement à l'intérieur de chaque fichier pour en déterminer le type. -\paragraph{file}\index[cmds]{file|textbf} +\paragraph{file}\commande*{file} La commande \mintinline{text}|file| permet de tout savoir sur les types de fichiers. Nous pouvons la lancer sur la racine de notre dépôt Git: @@ -576,7 +582,8 @@ interprété comme une suite distincte de trois arguments: Et le \emph{shell} ne pourra pas le trouver. Il y a deux solutions possibles: \begin{enumerate}\label{ref:guillemets-simples-intro} -\item Placer le nom du fichier entre guillemets simples: +\item Placer le nom du fichier entre + \hypertarget{lnk_guillemets}{guillemets} simples: \begin{minted}{text} [robert@kiddo courses]$ ls 'photos de vacances.zip' 'photos de vacances.zip' @@ -603,7 +610,7 @@ possibles: Tout fichier dont le nom commence par un point (\mintinline{text}|.|) est considéré comme un fichier caché. Le plus souvent, les fichiers cachés contiennent des paramètres de configuration. La commande -\index[cmds]{ls}\mintinline{text}|ls| est capable de les afficher si +\commande{ls}\mintinline{text}|ls| est capable de les afficher si on lui passe l'option \mintinline{text}|-a| pour \emph{all}. Appliquons cette option sur notre dépôt Git: \begin{minted}[escapeinside=||,linenos]{text} @@ -631,7 +638,7 @@ ligne~7 un fichier caché. Ces commandes s'ajoutent à celles qui sont décrites plus haut (\vref{sec:prem-comm}). -\paragraph{mkdir}\index[cmds]{mkdir|textbf} +\paragraph{mkdir}\commande*{mkdir} Sert à créer un nouveau répertoire. L'option \mintinline{text}|-p| peut-être utilisée si l'on veut créer d'un coup un répertoire et un ou plusieurs sous-répertoires. L'option \mintinline{text}|-v|, pour @@ -643,19 +650,19 @@ mkdir: création du répertoire 'sandbox' mkdir: création du répertoire 'sandbox/robert' \end{minted} -\paragraph{touch}\index[cmds]{touch|textbf} +\paragraph{touch}\commande*{touch} Sert à créer un fichier vide dont le nom est passé en argument. Cette commande sert également à modifier les métadonnées de temps associées aux fichiers (date de création et/ou de modification). L'exemple suivant montre comment créer un nouveau dossier dans lequel on crée également un fichier vide \verb|fichier.txt|. Ensuite, on -utilise la commande \index[cmds]{mv}\verb|mv| pour \emph{déplacer} ce +utilise la commande \commande{mv}\verb|mv| pour \emph{déplacer} ce fichier vers un autre fichier \verb|fichier-mk2.txt| au même endroit. Le résultat de cette action particulière, le \emph{déplacement au même endroit}, est tout simplement de renommer le fichier. Enfin, la commande % -\index[cmds]{ls}\verb|ls -l| sert de moyen de contrôle: +\commande{ls}\verb|ls -l| sert de moyen de contrôle: \begin{minted}{text} [robert@kiddo courses]$ mkdir -pv sandbox mkdir: création du répertoire 'sandbox' @@ -669,7 +676,7 @@ total 0 \subsection{Commandes destructives} \label{sec:comm-destr} -\paragraph{rm}\index[cmds]{rm|textbf} +\paragraph{rm}\commande*{rm} Pour \emph{remove}. Il suffit de passer en argument à cette commande ce que l'on souhaite détruire. Par défaut, cette commande ne détruit pas 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 que les fichiers cachés du répertoire courant dont le nom commence par un point. -\section{Wildcards} +\section[Wildcards]{\hypertarget{lnk_wildcards}{Wildcards}} \label{sec:wildcards} Les \emph{wildcards}, ou \enquote{métacaractères} sont des caractères ou des séquences de caractères qui servent à représenter des séries de @@ -726,7 +733,9 @@ ls [QGH]* majuscules ou minuscules. \end{itemize} -\section{Redirection et chaînage} +\section[Redirection et +chaînage]{\hypertarget{lnk_redirection}{Redirection} + et chaînage} \label{sec:redir-et-chain} Nous avons vu jusqu'ici que les commandes renvoient normalement leur ré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 \end{enumerate} Dans l'exemple qui suit, on demande à la commande -\index[cmds]{ls}\verb|ls -l| de rediriger son résultat vers un fichier +\commande{ls}\verb|ls -l| de rediriger son résultat vers un fichier \verb|all-files.txt|. On s'assure que ce fichier a bien été créé, puis -on demande à la commande \index[cmds]{cat}\verb|cat| d'en afficher le +on demande à la commande \commande{cat}\verb|cat| d'en afficher le contenu au terminal. Les trois commandes sont entrées aux lignes 1, 2 et 4: \begin{minted}[escapeinside=||,linenos]{text} @@ -791,7 +800,7 @@ caractère \emph{pipe} (\verb+|+). Avant d'aller plus loin, étudions rapidement deux nouvelles commandes qui servent à filtrer le contenu des fichiers. -\paragraph{head}\label{ref:head-tail}\index[cmds]{head|textbf} +\paragraph{head}\label{ref:head-tail}\commande*{head} \mintinline{text}|head - fichier| affiche au terminal les \verb|| premières lignes d'un fichier. Sans l'option \mintinline{text}|-|, les 10 premières lignes sont @@ -803,7 +812,7 @@ affichées. Exemple: ./_preamble.tex \end{minted} -\paragraph{tail}\index[cmds]{tail|textbf} +\paragraph{tail}\commande*{tail} \mintinline{text}|tail - fichier| affiche au terminal les \verb|| dernières lignes d'un fichier. Sans l'option \mintinline{text}|-|, les 10 dernières lignes sont affichées. @@ -822,7 +831,7 @@ dernière ligne, \emph{mais en commençant à partir de la ligne} Cet exemple reprend des commandes connues. Supposons que l'on veuille connaître simplement le nombre de fichiers du notre dépôt Git. Nous savons produire une liste à l'aide de la commande -\index[cmds]{ls}\verb|ls -l|. Nous savons également que la commande +\commande{ls}\verb|ls -l|. Nous savons également que la commande \verb|wc -l| compte les lignes. Cependant, la première ligne retournée par la commande \verb|ls -l|, qui donne la somme des \emph{file system blocks} occupés par le contenu du répertoire, doit être exclue du @@ -844,15 +853,15 @@ leur contenu. Nous en avons étudié deux plus haut (\vpageref{ref:head-tail}): \begin{enumerate} -\item \index[cmds]{head}\verb|head| qui sélectionne les premières +\item \commande{head}\verb|head| qui sélectionne les premières lignes d'un fichier. -\item \index[cmds]{tail}\verb|tail| qui sélectionne les dernières +\item \commande{tail}\verb|tail| qui sélectionne les dernières lignes d'un fichier. \end{enumerate} On ajoutera ici les commandes suivantes: -\paragraph{cat}\index[cmds]{cat|textbf} +\paragraph{cat}\commande*{cat} Affiche au terminal tout le contenu d'un fichier: \begin{minted}{text} [robert@kiddo courses]$ cat ls-R @@ -863,7 +872,7 @@ Affiche au terminal tout le contenu d'un fichier: ./README.tex \end{minted} -\paragraph{wc}\label{ref:wc}\index[cmds]{wc|textbf} +\paragraph{wc}\label{ref:wc}\commande*{wc} Pour \emph{word count}. Cette commande a été utilisée plus haut une fois avec l'option \verb|-l| pour compter les lignes d'un fichier (\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 21 114 627 makefile \end{minted} -\paragraph{cut}\index[cmds]{cut|textbf} +\paragraph{cut}\commande*{cut} Permet de mettre en forme des données. Prenons l'exemple du fichier suivant: \\ \mintinline{text}|etudiants.txt| \begin{minted}{text} @@ -909,7 +918,7 @@ forme de façon à placer le prénom avant le nom et avoir les adresses email entre crochets pointus? Comment faire aussi pour récupérer les données dans un tableur? -\paragraph{awk}\index[cmds]{awk|textbf} +\paragraph{awk}\commande*{awk} Ce programme accessible à la ligne de commande permet d'effectuer ce travail facilement. Il sélectionne les données dans l'ordre que l'on souhaite à l'aide de variables: \verb|$1|, \verb|$2|, \verb|$3|, @@ -946,7 +955,7 @@ Hector;Pédot; \end{enumerate} \end{quoting} Pour terminer, il suffit de renommer le fichier \verb|etudiants.txt| -en \verb|etudiants.csv| par la commande:\index[cmds]{mv} +en \verb|etudiants.csv| par la commande:\commande{mv} \begin{minted}{text} mv etudiants.txt etudiants.csv \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 @@ \usepackage{capt-of} \usepackage{soul} \makeindex[name=cmds, intoc, title={Liste des commandes et - instructions}] + instructions}, options={-s \jobname.ist}] + +\NewDocumentCommand{\commande}{s m O{}}{ + \IfBooleanTF{#1}{\index[cmds]{#2@\texttt{#2}|#3textbf}} + {\index[cmds]{#2@\texttt{#2}#3}} +} \begin{document} \maketitle @@ -28,13 +33,13 @@ \listoftables \chapter{grep, les expressions régulières} -\label{cha:grep-les-expressions}\index[cmds]{grep} +\label{cha:grep-les-expressions}\commande{grep} Les expressions régulières se rapprochent des \emph{wildcards} ou \enquote{métacaractères} qui ont été présentés dans -\href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L714}{le - cours sur la ligne de commande}. C'est une technique commune à pour -ainsi dire tous les langages de programmation qui permet de construire -des \enquote{modèles}, en anglais \emph{patterns}, susceptibles de +\href{./01-ligne-de-commande.pdf#lnk_wildcards}{le cours sur la ligne + de commande}. C'est une technique commune à pour ainsi dire tous les +langages de programmation qui permet de construire des +\enquote{modèles}, en anglais \emph{patterns}, susceptibles de capturer des chaînes de caractères. Par exemple, soit le fichier suivant: @@ -113,7 +118,8 @@ symboles suivants\footnote{Cette liste n'est pas exhaustive.}: \end{xltabular} \paragraph{grep, egrep} -\index[cmds]{grep|textbf}\index[cmds]{egrep|see{grep}} +\commande*{grep} +\commande{egrep}[|see{\texttt{grep}}] À la place de \verb|grep|, on peut saisir à la ligne de commande \verb|egrep| ou \verb|grep -E| pour \emph{extended regular expressions}. Quelle est la différence? Retenez ici simplement que @@ -144,8 +150,9 @@ d'options. Parmi ces options, retenons celles-ci: \end{description} \paragraph{Exemples} -Les exemples ci-dessous utilisent \href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L737}{la - technique de la redirection}. +Les exemples ci-dessous utilisent +\href{./01-ligne-de-commande.pdf#lnk_redirection}{la technique de la + redirection}. \begin{minted}{text} [robert@kiddo courses]$ cat /usr/share/dict/cracklib-small | grep '\' | grep 'ea' scream @@ -354,7 +361,7 @@ Pour un exemple de code commenté, voir le \vref{lst:copyten}. \label{sec:execution} Il faut ici approfondir la notion de \emph{permissions} sur les fichiers qui a été présentée dans le cours sur la -\href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L454}{ligne +\href{./01-ligne-de-commande.pdf#lnk_permissions}{ligne de commande}. Nous avons en effet étudié trois types de permissions sur les fichiers: en lecture, en écriture et en exécution. Revenons sur les permissions données par défaut au script \verb|backup.sh|: @@ -370,7 +377,7 @@ Soit: \end{itemize} \paragraph{chmod} -\index[cmds]{chmod|textbf} +\commande*{chmod} La commande qui permet de changer les droits s'appelle \verb|chmod|. Pour comprendre comment l'utiliser, il faut savoir que les 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. \begin{enumerate} \item La commande \verb|chmod| a été entrée à la ligne 1. \item À la ligne 2, nous avons lancé la commande - \index[cmds]{ls}\mintinline{text}|ls -l --color| sur le fichier + \commande{ls}\mintinline{text}|ls -l --color| sur le fichier \verb|backup.sh|: les droits listés à la ligne 3 montrent bien que la valeur \verb|x| a été ajoutée aux trois endroits possibles. On 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 \begin{quoting} \textbf{Commentaire:} \begin{itemize} - \item lignes 1--11: la commande \index[cmds]{ls}\verb|ls -l --color| + \item lignes 1--11: la commande \commande{ls}\verb|ls -l --color| donne l'état du dossier \emph{avant} l'exécution du script \verb|backup.sh|; \item lignes 12--17: exécution du script et messages du terminal; @@ -486,7 +493,7 @@ caché. Les variables sont des informations temporaires qui peuvent être stockées et rappelées à tout moment. L'exemple qui suit va donner l'occasion d'étudier une nouvelle commande, -\index[cmds]{echo}\verb|echo|, dont le rôle est justement de retourner +\commande{echo}\verb|echo|, dont le rôle est justement de retourner au terminal la chaîne de caractères qu'on lui passe en argument: \begin{minted}[linenos]{text} [robert@kiddo courses]$ mysystem="Linux" @@ -507,7 +514,7 @@ Mon système est Linux. \end{description} \begin{mdframed}[backgroundcolor=Cyan] Observez la différence dans l'usage des guillemets! - \href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L558}{Comme + \href{./01-ligne-de-commande.pdf#lnk_guillemets}{Comme on le sait}, les guillemets servent à indiquer au \emph{shell} que les espaces ne sont pas des caractères actifs. Il y a cependant une grande différence entre les guillemets simples et @@ -543,7 +550,7 @@ echo "et l'archive $backupdir.zip a été créée." \paragraph{read} \label{ref:read} -\index[cmds]{read|textbf} Cette nouvelle commande est expliquée dans +\commande*{read} Cette nouvelle commande est expliquée dans le commentaire qui suit\footnote{Voir aussi plus loin \vpageref{ref:read-plus}.}: \begin{quoting} @@ -605,9 +612,9 @@ précédées du signe $=$. Exemple: \begin{quoting} \textbf{Commentaire:} \begin{enumerate} - \item À la ligne~1, la commande \index[cmds]{ls}\verb|ls| liste les + \item À la ligne~1, la commande \commande{ls}\verb|ls| liste les fichiers, puis son résultat est interprété par - \index[cmds]{wc}\verb|wc -l| qui compte le nombre de fichiers + \commande{wc}\verb|wc -l| qui compte le nombre de fichiers retournés. \item La variable \verb|$nbre| contient donc ce dernier résultat. \end{enumerate} @@ -670,20 +677,20 @@ fi \begin{enumerate} \item Observez la structure de la condition: \begin{itemize} - \item ligne 1: \index[cmds]{if|textbf}\mintinline{bash}|if| + \item ligne 1: \commande*{if}\mintinline{bash}|if| $\rightarrow$ \emph{si } où la condition est posée entre crochets. Dans l'expression entre les crochets, % \verb|-d "$backupdir"|, \verb|-d| signifie: \verb|$backupdir| existe \emph{et} est un répertoire; - \item ligne 2: \index[cmds]{then|textbf}\mintinline{bash}|then| + \item ligne 2: \commande*{then}\mintinline{bash}|then| $\rightarrow$ \emph{alors, passez à la ligne suivante}; - \item ligne 6: \index[cmds]{else|textbf}\mintinline{bash}|else| + \item ligne 6: \commande*{else}\mintinline{bash}|else| $\rightarrow$ \emph{autrement, passez à la ligne suivante}; - \item ligne 8: \index[cmds]{fi|textbf}\mintinline{bash}|fi| + \item ligne 8: \commande*{fi}\mintinline{bash}|fi| $\rightarrow$ \emph{fin de la condition} (en fait les deux lettres de la conjonction \verb|if| écrite à l'envers). \end{itemize} - \item À la ligne 5, la commande \index[cmds]{exit}\verb|exit 1| + \item À la ligne 5, la commande \commande{exit}\verb|exit 1| ordonne au programme de se terminer immédiatement et de renvoyer la valeur \verb|1| comme numéro d'état (\emph{status number}). Par 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 l'archive \verb|.zip| correspondante ne l'ait pas été. Dans ce cas, le script \verb|backup.sh| l'écraserait. Pour éviter cela, nous pouvons utiliser dans le script l'instruction -\index[cmds]{elif|textbf}\verb|elif| qui permet de construire des +\commande*{elif}\verb|elif| qui permet de construire des conditions en série. Littéralement, \verb|elif| est pour \emph{else if}, \enquote{ou autrement, si\ldots}. Voici donc ce qu'il faut ajouter: @@ -802,14 +809,14 @@ droits comme le montre la ligne~7 du \vref{lst:if-then-else}. \end{xltabular} \paragraph{test} -\index[cmds]{test|textbf} À l'intérieur du script \verb|bash|, les +\commande*{test} À l'intérieur du script \verb|bash|, les crochets renvoient en fait à une commande par ailleurs disponible: \verb|test|. La commande \verb|test| renvoie en fait la sortie \verb|0| si le résultat est \emph{vrai} et \verb|1| si le résultat est \emph{faux}. Le terminal ne retourne pas le resultat, mais celui-ci est associé à une variable \verb|$?| que l'on peut afficher par la commande: -\index[cmds]{echo}\mintinline{bash}|echo $?|. En voici quelques +\commande{echo}\mintinline{bash}|echo $?|. En voici quelques exemples: \begin{minted}[linenos]{text} [robert@kiddo courses]$ ls @@ -845,8 +852,8 @@ code différentes profondeurs de marge à gauche de façon à distinguer clairement des blocs logiques. Les lignes 7--20 du \vref{lst:if-then-else} en donnent un exemple. L'indentation permet de faire apparaître clairement ce qui dépend de l'instruction -\index[cmds]{if}\verb|if| (l.~7), puis \index[cmds]{elif}\verb|elif| -(l.~12) et enfin \index[cmds]{else}\verb|else| (l.~18). +\commande{if}\verb|if| (l.~7), puis \commande{elif}\verb|elif| +(l.~12) et enfin \commande{else}\verb|else| (l.~18). Cette technique est commune à tous les langages informatiques et tous les programmeurs l'utilisent. En Python, que nous étudierons plus @@ -898,7 +905,7 @@ fi \end{minted} \subsection{case} -\label{sec:case}\index[cmds]{case|textbf} +\label{sec:case}\commande*{case} \verb|case| est une instruction qui permet d'exécuter différentes actions en fonction de la valeur d'une variable. Elle est intéressante à étudier ici car elle fait appel à la fois à la notion de variable et @@ -951,7 +958,7 @@ esac \textbf{Commentaire:} \begin{enumerate} \item À la ligne 4, l'utilisateur est invité à entrer une - réponse. L'instruction \index[cmds]{read}\verb|read| associe la + réponse. L'instruction \commande{read}\verb|read| associe la réponse à la variable \verb|animal|. \item À la ligne 6, l'instruction \verb|case| reprend la variable qui est donc préfixée par le signe \verb|$|. @@ -968,7 +975,7 @@ esac \begin{quoting} \textbf{Remarque:} à la place de l'instruction \verb|case|, on recommande aujourd'hui d'utiliser une nouvelle instruction, - \index[cmds]{switch}\verb|switch|, dont la syntaxe, plus complexe, + \commande{switch}\verb|switch|, dont la syntaxe, plus complexe, n'est pas étudiée ici. \end{quoting} @@ -976,11 +983,12 @@ esac \label{sec:boucles} Les boucles (en anglais: \emph{loops}) servent à indiquer qu'une série d'instructions doit reprendre et continuer à s'exécuter aussi -longtemps qu'une condition donnée n'est pas remplie. +longtemps qu'une condition donnée est remplie ou n'est pas remplie. Prenons un exemple simple. Nous avons dans un répertoire plusieurs -centaines d'images et nous souhaitons convertir au format \verb|.png| -toutes les images qui sont enregistrées au format \verb|.tiff|. +centaines d'images de différents formats et nous souhaitons convertir +au format \verb|.png| toutes les images qui sont enregistrées au +format \verb|.tiff|. Pour convertir une seule image, nous pouvons utiliser l'outil en ligne de commande \verb|convert| fourni par le programme @@ -995,10 +1003,10 @@ répertoire qui en compte des centaines enregistrées dans des formats différents? \paragraph{basename} -\index[cmds]{basename|textbf}Avant de continuer, il faut dire un mot -de la commande \verb|basename| que nous allons utiliser ici. Cette -commande permet de dépouiller un nom de fichier de son chemin d'accès -et de son extension. La syntaxe est la suivante: +\commande*{basename}Avant de continuer, il faut dire un mot de la +commande \verb|basename| que nous allons utiliser ici. Cette commande +permet de dépouiller un nom de fichier de son chemin d'accès et de son +extension. La syntaxe est la suivante: \begin{minted}[escapeinside=||]{text} basename -s .|\emph{ext}| |\emph{file}| \end{minted} @@ -1021,14 +1029,15 @@ total 252 \end{minted} \paragraph{for-do-done} -\index[cmds]{for|textbf}\index[cmds]{do|textbf}\index[cmds]{done|textbf} +\commande*{for}\commande*{do}\commande*{done} La boucle que nous allons utiliser fait appel à trois instructions: \begin{enumerate} \item \verb|for| prend comme argument un nom qui sera ensuite traité comme une variable. Le nom de la variable est suivi de l'instruction - \verb|in| et d'un nom de fichier qui contient des données séparées - par des espaces ou bien d'une expression dans laquelle on a placé - des \emph{wildcards}. + \commande{in}\verb|in| et d'un nom de fichier qui contient des + données séparées par des espaces ou bien d'une expression dans + laquelle on a placé des + \href{./01-ligne-de-commande.pdf#lnk_wildcards}{\emph{wildcards}}. \item \verb|do| est suivi des commandes qu'il faut exécuter sur chaque élément retourné par l'instruction \verb|for| \ldots{} \verb|in|. \item \verb|done| marque la fin de la boucle. @@ -1068,7 +1077,7 @@ done \end{quoting} \paragraph{while} -\index[cmds]{while|textbf} L'expression \verb|while| exécute les +\commande*{while} L'expression \verb|while| exécute les lignes de code qui suivent aussi longtemps qu'un test donné retourne un résultat positif (\enquote{vrai}, en anglais \emph{true}). Le script \verb|countlines.sh|, donné dans le \cref{lst:countlines} @@ -1105,7 +1114,7 @@ fi \captionof{listing}{bash: \texttt{while}\label{lst:countlines}} \paragraph{read} -\label{ref:read-plus}\index[cmds]{read|textbf} +\label{ref:read-plus}\commande*{read} On a déjà présenté plus haut \vpageref{ref:read} cette instruction. Pour bien comprendre le \cref{lst:countlines}, il faut savoir que la fonction de \verb|read| est de \emph{lire une ligne}, @@ -1128,7 +1137,7 @@ par un \emph{retour charriot} (\emph{carriage return}). Étudions de près les lignes~13--17 du \cref{lst:countlines}: l'instruction \verb|while| (l.~13) se termine à la ligne~17 par \verb|done|. Et aussitôt à ce moment, -\href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L749}{l'opérateur +\href{./01-ligne-de-commande.pdf#lnk_redirection}{l'opérateur de redirection} \mintinline{bash}|<| lit le contenu du fichier dont le nom correspond à la variable \verb|file| et le passe en argument à la boucle \verb|while ... done|. @@ -1165,7 +1174,7 @@ Votre fichier makefile compte 21 lignes. \end{minted} \paragraph{until} -\index[cmds]{until|textbf}À la différence de \verb|while|, +\commande*{until}À la différence de \verb|while|, \verb|until| exécute les instructions qui suivent jusqu'au moment où le résultat du test associé à \verb|until| devient \emph{positif} (\emph{true}). Pour prendre un exemple très simple, le script suivant, @@ -1192,8 +1201,8 @@ done \textbf{Commentaire:} \begin{enumerate} \item La condition posée à la ligne~8 se comprend ainsi: - \enquote{faites ce qui suit jusqu'à ce que le compteurs de - rugissements atteingne une valeur supérieure à celle définie par + \enquote{faites ce qui suit jusqu'à ce que le compteur de + rugissements atteigne une valeur supérieure à celle définie par l'utilisateur. Si la valeur est supérieure, sortez de la boucle.} \item À la ligne~11, on demande à \emph{bash} d'attendre une seconde. \item À la ligne~12, on incrémente de 1 la valeur du compteur de @@ -1213,7 +1222,7 @@ Raaaaaaaaahhhhhhhhhhhh! (3) \end{minted} \paragraph{break} -\index[cmds]{break|textbf} \verb|break| est une instruction qui +\commande*{break} \verb|break| est une instruction qui ordonne de quitter immédiatement la boucle dans laquelle on se trouve. Supposons par exemple que l'on écrive un programme dans lequel on souhaite limiter une action telle que la copie de @@ -1288,7 +1297,7 @@ Terminé. 10 fichiers au maximum ont été copiés dans Houba. \end{minted} \paragraph{continue} -\index[cmds]{continue|textbf} À l'inverse de \verb|break|, +\commande*{continue} À l'inverse de \verb|break|, \verb|continue| demande à \emph{bash} d'interrompre l'itération courante mais sans quitter la boucle, puis de reprendre la boucle à partir de l'itération suivante. C'est une façon de prévoir des @@ -1417,6 +1426,7 @@ if [ $numline -le 1 ] echo "Votre fichier $file compte $numline lignes." fi \end{minted} +\enlargethispage{2\baselineskip} \captionof{listing}{bash: exemple de fonction\label{lst:countlines-mk2}} -- cgit v1.2.3