diff options
author | Robert Alessi <alessi@robertalessi.net> | 2018-09-25 16:15:50 +0200 |
---|---|---|
committer | Robert Alessi <alessi@robertalessi.net> | 2018-09-25 16:15:50 +0200 |
commit | a67cdf7e5a77d115192b358b707460cc85e64762 (patch) | |
tree | 4241b0a0369ae1cc1ce1931768bf86c5da3246e7 /fichiers | |
parent | a1d88aa56f6b32e46b08f70f7634803e17d45564 (diff) | |
download | courses-a67cdf7e5a77d115192b358b707460cc85e64762.tar.gz |
use hypertarget to set anchors
Diffstat (limited to 'fichiers')
-rw-r--r-- | fichiers/01-ligne-de-commande.tex | 79 | ||||
-rw-r--r-- | fichiers/03-grep-bash.tex | 110 |
2 files changed, 104 insertions, 85 deletions
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 | |||
50 | fallu saisir les lignes suivantes: | 55 | fallu 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} |
232 | Signifie \emph{print working directory}. Cette commande vous retourne | 237 | Signifie \emph{print working directory}. Cette commande vous retourne |
233 | tout simplement le chemin d'accès absolu du répertoire dans lequel | 238 | tout simplement le chemin d'accès absolu du répertoire dans lequel |
234 | vous vous trouvez. Très utile pour ne pas se perdre! Exemple: | 239 | 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: | |||
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} |
267 | Signifie \emph{move}. Cette commande déplace les fichiers d'un endroit | 272 | Signifie \emph{move}. Cette commande déplace les fichiers d'un endroit |
268 | vers un autre. La syntaxe est la suivante: | 273 | vers 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} |
297 | Signifie \emph{copy}. Cette commande copie des fichiers depuis un | 302 | Signifie \emph{copy}. Cette commande copie des fichiers depuis un |
298 | endroit vers un autre. La syntaxe est comparable à celle de la | 303 | endroit vers un autre. La syntaxe est comparable à celle de la |
299 | séquence \index[cmds]{mv}\mintinline{text}{mv}. | 304 | séquence \commande{mv}\mintinline{text}{mv}. |
300 | \begin{minted}[showspaces]{text} | 305 | \begin{minted}[showspaces]{text} |
301 | cp <source> <destination> | 306 | cp <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} |
325 | Signifie \emph{change directory}. Permet de changer de répertoire | 330 | Signifie \emph{change directory}. Permet de changer de répertoire |
326 | courant, par exemple pour travailler sur les fichiers d'un répertoire | 331 | courant, par exemple pour travailler sur les fichiers d'un répertoire |
327 | différent de son \emph{home directory}. La syntaxe est la suivante: | 332 | 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|: | |||
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} |
341 | Confirmation par la commande \index[cmds]{pwd}\mintinline{text}{pwd}: | 346 | Confirmation 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}[(] |
354 | Signifie \emph{list}. Affiche à l'écran tous les fichiers et les | 359 | Signifie \emph{list}. Affiche à l'écran tous les fichiers et les |
355 | répertoires contenus dans un répertoire donné. Si on ne précise pas le | 360 | répertoires contenus dans un répertoire donné. Si on ne précise pas le |
356 | répertoire dont il faut lister les fichiers, la commande liste les | 361 | 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. | |||
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. | |||
513 | cas de l'extension mais regarde directement à l'intérieur de chaque | 519 | cas de l'extension mais regarde directement à l'intérieur de chaque |
514 | fichier pour en déterminer le type. | 520 | fichier pour en déterminer le type. |
515 | 521 | ||
516 | \paragraph{file}\index[cmds]{file|textbf} | 522 | \paragraph{file}\commande*{file} |
517 | La commande \mintinline{text}|file| permet de tout savoir sur les | 523 | La commande \mintinline{text}|file| permet de tout savoir sur les |
518 | types de fichiers. Nous pouvons la lancer sur la racine de notre dépôt | 524 | types de fichiers. Nous pouvons la lancer sur la racine de notre dépôt |
519 | Git: | 525 | Git: |
@@ -576,7 +582,8 @@ interprété comme une suite distincte de trois arguments: | |||
576 | Et le \emph{shell} ne pourra pas le trouver. Il y a deux solutions | 582 | Et le \emph{shell} ne pourra pas le trouver. Il y a deux solutions |
577 | possibles: | 583 | possibles: |
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: | |||
603 | Tout fichier dont le nom commence par un point (\mintinline{text}|.|) | 610 | Tout fichier dont le nom commence par un point (\mintinline{text}|.|) |
604 | est considéré comme un fichier caché. Le plus souvent, les fichiers | 611 | est considéré comme un fichier caché. Le plus souvent, les fichiers |
605 | cachés contiennent des paramètres de configuration. La commande | 612 | caché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 |
607 | on lui passe l'option \mintinline{text}|-a| pour | 614 | on 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é. | |||
631 | Ces commandes s'ajoutent à celles qui sont décrites plus haut | 638 | Ces 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} |
635 | Sert à créer un nouveau répertoire. L'option \mintinline{text}|-p| | 642 | Sert à créer un nouveau répertoire. L'option \mintinline{text}|-p| |
636 | peut-être utilisée si l'on veut créer d'un coup un répertoire et un ou | 643 | peut-être utilisée si l'on veut créer d'un coup un répertoire et un ou |
637 | plusieurs sous-répertoires. L'option \mintinline{text}|-v|, pour | 644 | plusieurs sous-répertoires. L'option \mintinline{text}|-v|, pour |
@@ -643,19 +650,19 @@ mkdir: création du répertoire 'sandbox' | |||
643 | mkdir: création du répertoire 'sandbox/robert' | 650 | mkdir: 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} |
647 | Sert à créer un fichier vide dont le nom est passé en argument. Cette | 654 | Sert à créer un fichier vide dont le nom est passé en argument. Cette |
648 | commande sert également à modifier les métadonnées de temps associées | 655 | commande sert également à modifier les métadonnées de temps associées |
649 | aux fichiers (date de création et/ou de modification). | 656 | aux fichiers (date de création et/ou de modification). |
650 | 657 | ||
651 | L'exemple suivant montre comment créer un nouveau dossier dans lequel | 658 | L'exemple suivant montre comment créer un nouveau dossier dans lequel |
652 | on crée également un fichier vide \verb|fichier.txt|. Ensuite, on | 659 | on crée également un fichier vide \verb|fichier.txt|. Ensuite, on |
653 | utilise la commande \index[cmds]{mv}\verb|mv| pour \emph{déplacer} ce | 660 | utilise la commande \commande{mv}\verb|mv| pour \emph{déplacer} ce |
654 | fichier vers un autre fichier \verb|fichier-mk2.txt| au même | 661 | fichier vers un autre fichier \verb|fichier-mk2.txt| au même |
655 | endroit. Le résultat de cette action particulière, le | 662 | endroit. 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 |
657 | fichier. Enfin, la commande % | 664 | fichier. 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 |
661 | mkdir: création du répertoire 'sandbox' | 668 | mkdir: 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} |
673 | Pour \emph{remove}. Il suffit de passer en argument à cette commande | 680 | Pour \emph{remove}. Il suffit de passer en argument à cette commande |
674 | ce que l'on souhaite détruire. Par défaut, cette commande ne détruit | 681 | ce que l'on souhaite détruire. Par défaut, cette commande ne détruit |
675 | pas les répertoires. Elle accepte une série d'options dont voici les | 682 | 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 | |||
703 | que les fichiers cachés du répertoire courant dont le nom commence | 710 | que les fichiers cachés du répertoire courant dont le nom commence |
704 | par un point. | 711 | par un point. |
705 | 712 | ||
706 | \section{Wildcards} | 713 | \section[Wildcards]{\hypertarget{lnk_wildcards}{Wildcards}} |
707 | \label{sec:wildcards} | 714 | \label{sec:wildcards} |
708 | Les \emph{wildcards}, ou \enquote{métacaractères} sont des caractères | 715 | Les \emph{wildcards}, ou \enquote{métacaractères} sont des caractères |
709 | ou des séquences de caractères qui servent à représenter des séries de | 716 | ou 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 |
737 | chaînage]{\hypertarget{lnk_redirection}{Redirection} | ||
738 | et chaînage} | ||
730 | \label{sec:redir-et-chain} | 739 | \label{sec:redir-et-chain} |
731 | Nous avons vu jusqu'ici que les commandes renvoient normalement leur | 740 | Nous avons vu jusqu'ici que les commandes renvoient normalement leur |
732 | résultat sur le terminal lui-même. On peut cependant rediriger ce que | 741 | 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 | |||
743 | \end{enumerate} | 752 | \end{enumerate} |
744 | 753 | ||
745 | Dans l'exemple qui suit, on demande à la commande | 754 | Dans 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 |
748 | on demande à la commande \index[cmds]{cat}\verb|cat| d'en afficher le | 757 | on demande à la commande \commande{cat}\verb|cat| d'en afficher le |
749 | contenu au terminal. Les trois commandes sont entrées aux lignes 1, 2 | 758 | contenu au terminal. Les trois commandes sont entrées aux lignes 1, 2 |
750 | et 4: | 759 | et 4: |
751 | \begin{minted}[escapeinside=||,linenos]{text} | 760 | \begin{minted}[escapeinside=||,linenos]{text} |
@@ -791,7 +800,7 @@ caractère \emph{pipe} (\verb+|+). | |||
791 | Avant d'aller plus loin, étudions rapidement deux nouvelles commandes | 800 | Avant d'aller plus loin, étudions rapidement deux nouvelles commandes |
792 | qui servent à filtrer le contenu des fichiers. | 801 | qui 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} | |||
822 | Cet exemple reprend des commandes connues. Supposons que l'on veuille | 831 | Cet exemple reprend des commandes connues. Supposons que l'on veuille |
823 | connaître simplement le nombre de fichiers du notre dépôt Git. Nous | 832 | connaître simplement le nombre de fichiers du notre dépôt Git. Nous |
824 | savons produire une liste à l'aide de la commande | 833 | savons 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 |
827 | par la commande \verb|ls -l|, qui donne la somme des \emph{file system | 836 | par 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 | ||
845 | Nous en avons étudié deux plus haut (\vpageref{ref:head-tail}): | 854 | Nous 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 | ||
853 | On ajoutera ici les commandes suivantes: | 862 | On ajoutera ici les commandes suivantes: |
854 | 863 | ||
855 | \paragraph{cat}\index[cmds]{cat|textbf} | 864 | \paragraph{cat}\commande*{cat} |
856 | Affiche au terminal tout le contenu d'un fichier: | 865 | Affiche 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} |
867 | Pour \emph{word count}. Cette commande a été utilisée plus haut une | 876 | Pour \emph{word count}. Cette commande a été utilisée plus haut une |
868 | fois avec l'option \verb|-l| pour compter les lignes d'un fichier | 877 | fois 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} |
878 | Permet de mettre en forme des données. Prenons l'exemple du fichier | 887 | Permet de mettre en forme des données. Prenons l'exemple du fichier |
879 | suivant: \\ \mintinline{text}|etudiants.txt| | 888 | suivant: \\ \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 | |||
909 | email entre crochets pointus? Comment faire aussi pour récupérer les | 918 | email entre crochets pointus? Comment faire aussi pour récupérer les |
910 | données dans un tableur? | 919 | données dans un tableur? |
911 | 920 | ||
912 | \paragraph{awk}\index[cmds]{awk|textbf} | 921 | \paragraph{awk}\commande*{awk} |
913 | Ce programme accessible à la ligne de commande permet d'effectuer ce | 922 | Ce programme accessible à la ligne de commande permet d'effectuer ce |
914 | travail facilement. Il sélectionne les données dans l'ordre que l'on | 923 | travail facilement. Il sélectionne les données dans l'ordre que l'on |
915 | souhaite à l'aide de variables: \verb|$1|, \verb|$2|, \verb|$3|, | 924 | souhaite à 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} |
948 | Pour terminer, il suffit de renommer le fichier \verb|etudiants.txt| | 957 | Pour terminer, il suffit de renommer le fichier \verb|etudiants.txt| |
949 | en \verb|etudiants.csv| par la commande:\index[cmds]{mv} | 958 | en \verb|etudiants.csv| par la commande:\commande{mv} |
950 | \begin{minted}{text} | 959 | \begin{minted}{text} |
951 | mv etudiants.txt etudiants.csv | 960 | mv 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} |
32 | Les expressions régulières se rapprochent des \emph{wildcards} ou | 37 | Les 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 |
36 | ainsi dire tous les langages de programmation qui permet de construire | 41 | langages de programmation qui permet de construire des |
37 | des \enquote{modèles}, en anglais \emph{patterns}, susceptibles de | 42 | \enquote{modèles}, en anglais \emph{patterns}, susceptibles de |
38 | capturer des chaînes de caractères. | 43 | capturer des chaînes de caractères. |
39 | 44 | ||
40 | Par exemple, soit le fichier suivant: | 45 | Par 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} |
147 | Les exemples ci-dessous utilisent \href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L737}{la | 153 | Les 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' |
151 | scream | 158 | scream |
@@ -354,7 +361,7 @@ Pour un exemple de code commenté, voir le \vref{lst:copyten}. | |||
354 | \label{sec:execution} | 361 | \label{sec:execution} |
355 | Il faut ici approfondir la notion de \emph{permissions} sur les | 362 | Il faut ici approfondir la notion de \emph{permissions} sur les |
356 | fichiers qui a été présentée dans le cours sur la | 363 | fichiers 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 |
359 | sur les fichiers: en lecture, en écriture et en exécution. Revenons | 366 | sur les fichiers: en lecture, en écriture et en exécution. Revenons |
360 | sur les permissions données par défaut au script \verb|backup.sh|: | 367 | sur 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} |
374 | La commande qui permet de changer les droits s'appelle | 381 | La 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 |
376 | les permissions sont traduites par des valeurs numériques, à savoir: | 383 | 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. | |||
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é. | |||
486 | Les variables sont des informations temporaires qui peuvent être | 493 | Les variables sont des informations temporaires qui peuvent être |
487 | stockées et rappelées à tout moment. L'exemple qui suit va donner | 494 | stockées et rappelées à tout moment. L'exemple qui suit va donner |
488 | l'occasion d'étudier une nouvelle commande, | 495 | l'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 |
490 | au terminal la chaîne de caractères qu'on lui passe en argument: | 497 | au 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 |
547 | le commentaire qui suit\footnote{Voir aussi plus loin | 554 | le 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 | |||
723 | l'archive \verb|.zip| correspondante ne l'ait pas été. Dans ce cas, le | 730 | l'archive \verb|.zip| correspondante ne l'ait pas été. Dans ce cas, le |
724 | script \verb|backup.sh| l'écraserait. Pour éviter cela, nous pouvons | 731 | script \verb|backup.sh| l'écraserait. Pour éviter cela, nous pouvons |
725 | utiliser dans le script l'instruction | 732 | utiliser 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 |
727 | conditions en série. Littéralement, \verb|elif| est pour \emph{else | 734 | conditions 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 |
729 | ajouter: | 736 | ajouter: |
@@ -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 |
806 | crochets renvoient en fait à une commande par ailleurs disponible: | 813 | crochets 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 |
810 | est associé à une variable | 817 | est 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 |
813 | exemples: | 820 | exemples: |
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 | |||
845 | clairement des blocs logiques. Les lignes 7--20 du | 852 | clairement 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 |
847 | faire apparaître clairement ce qui dépend de l'instruction | 854 | faire 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 | ||
851 | Cette technique est commune à tous les langages informatiques et tous | 858 | Cette technique est commune à tous les langages informatiques et tous |
852 | les programmeurs l'utilisent. En Python, que nous étudierons plus | 859 | les 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 |
903 | actions en fonction de la valeur d'une variable. Elle est intéressante | 910 | actions 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} |
977 | Les boucles (en anglais: \emph{loops}) servent à indiquer qu'une série | 984 | Les boucles (en anglais: \emph{loops}) servent à indiquer qu'une série |
978 | d'instructions doit reprendre et continuer à s'exécuter aussi | 985 | d'instructions doit reprendre et continuer à s'exécuter aussi |
979 | longtemps qu'une condition donnée n'est pas remplie. | 986 | longtemps qu'une condition donnée est remplie ou n'est pas remplie. |
980 | 987 | ||
981 | Prenons un exemple simple. Nous avons dans un répertoire plusieurs | 988 | Prenons un exemple simple. Nous avons dans un répertoire plusieurs |
982 | centaines d'images et nous souhaitons convertir au format \verb|.png| | 989 | centaines d'images de différents formats et nous souhaitons convertir |
983 | toutes les images qui sont enregistrées au format \verb|.tiff|. | 990 | au format \verb|.png| toutes les images qui sont enregistrées au |
991 | format \verb|.tiff|. | ||
984 | 992 | ||
985 | Pour convertir une seule image, nous pouvons utiliser l'outil en ligne | 993 | Pour convertir une seule image, nous pouvons utiliser l'outil en ligne |
986 | de commande \verb|convert| fourni par le programme | 994 | de commande \verb|convert| fourni par le programme |
@@ -995,10 +1003,10 @@ répertoire qui en compte des centaines enregistrées dans des formats | |||
995 | différents? | 1003 | diffé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 |
999 | de la commande \verb|basename| que nous allons utiliser ici. Cette | 1007 | commande \verb|basename| que nous allons utiliser ici. Cette commande |
1000 | commande permet de dépouiller un nom de fichier de son chemin d'accès | 1008 | permet de dépouiller un nom de fichier de son chemin d'accès et de son |
1001 | et de son extension. La syntaxe est la suivante: | 1009 | extension. La syntaxe est la suivante: |
1002 | \begin{minted}[escapeinside=||]{text} | 1010 | \begin{minted}[escapeinside=||]{text} |
1003 | basename -s .|\emph{ext}| |\emph{file}| | 1011 | basename -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} |
1025 | La boucle que nous allons utiliser fait appel à trois instructions: | 1033 | La 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 |
1072 | lignes de code qui suivent aussi longtemps qu'un test donné retourne | 1081 | lignes de code qui suivent aussi longtemps qu'un test donné retourne |
1073 | un résultat positif (\enquote{vrai}, en anglais \emph{true}). Le | 1082 | un résultat positif (\enquote{vrai}, en anglais \emph{true}). Le |
1074 | script \verb|countlines.sh|, donné dans le \cref{lst:countlines} | 1083 | script \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} |
1109 | On a déjà présenté plus haut \vpageref{ref:read} cette | 1118 | On a déjà présenté plus haut \vpageref{ref:read} cette |
1110 | instruction. Pour bien comprendre le \cref{lst:countlines}, il faut | 1119 | instruction. Pour bien comprendre le \cref{lst:countlines}, il faut |
1111 | savoir que la fonction de \verb|read| est de \emph{lire une ligne}, | 1120 | 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}). | |||
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}: |
1129 | l'instruction \verb|while| (l.~13) se termine à la ligne~17 par | 1138 | l'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 |
1133 | le nom correspond à la variable \verb|file| et le passe en argument à | 1142 | le nom correspond à la variable \verb|file| et le passe en argument à |
1134 | la boucle \verb|while ... done|. | 1143 | la 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ù |
1170 | le résultat du test associé à \verb|until| devient \emph{positif} | 1179 | le 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 |
1217 | ordonne de quitter immédiatement la boucle dans laquelle on se | 1226 | ordonne de quitter immédiatement la boucle dans laquelle on se |
1218 | trouve. Supposons par exemple que l'on écrive un programme dans lequel | 1227 | trouve. Supposons par exemple que l'on écrive un programme dans lequel |
1219 | on souhaite limiter une action telle que la copie de | 1228 | 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. | |||
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 |
1293 | courante mais sans quitter la boucle, puis de reprendre la boucle à | 1302 | courante mais sans quitter la boucle, puis de reprendre la boucle à |
1294 | partir de l'itération suivante. C'est une façon de prévoir des | 1303 | partir 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." |
1418 | fi | 1427 | fi |
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 | ||