diff options
Diffstat (limited to 'fichiers/03-grep-bash.tex')
-rw-r--r-- | fichiers/03-grep-bash.tex | 110 |
1 files changed, 60 insertions, 50 deletions
diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index 291e6c9..8b9c78e 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex | |||
@@ -15,7 +15,12 @@ | |||
15 | \usepackage{capt-of} | 15 | \usepackage{capt-of} |
16 | \usepackage{soul} | 16 | \usepackage{soul} |
17 | \makeindex[name=cmds, intoc, title={Liste des commandes et | 17 | \makeindex[name=cmds, intoc, title={Liste des commandes et |
18 | instructions}] | 18 | instructions}, options={-s \jobname.ist}] |
19 | |||
20 | \NewDocumentCommand{\commande}{s m O{}}{ | ||
21 | \IfBooleanTF{#1}{\index[cmds]{#2@\texttt{#2}|#3textbf}} | ||
22 | {\index[cmds]{#2@\texttt{#2}#3}} | ||
23 | } | ||
19 | 24 | ||
20 | \begin{document} | 25 | \begin{document} |
21 | \maketitle | 26 | \maketitle |
@@ -28,13 +33,13 @@ | |||
28 | \listoftables | 33 | \listoftables |
29 | 34 | ||
30 | \chapter{grep, les expressions régulières} | 35 | \chapter{grep, les expressions régulières} |
31 | \label{cha:grep-les-expressions}\index[cmds]{grep} | 36 | \label{cha:grep-les-expressions}\commande{grep} |
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 | ||