diff options
Diffstat (limited to 'fichiers')
-rw-r--r-- | fichiers/03-grep-bash.tex | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index 638adfd..26409f9 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex | |||
@@ -472,6 +472,168 @@ qu'il s'agit d'un chemin d'accès. Sans le \emph{slash}, le | |||
472 | \emph{shell} aurait compris le point comme un préfixe de fichier | 472 | \emph{shell} aurait compris le point comme un préfixe de fichier |
473 | caché. | 473 | caché. |
474 | 474 | ||
475 | \section{Les variables} | ||
476 | \label{sec:les-variables} | ||
477 | Les variables sont des informations temporaires qui peuvent être | ||
478 | stockées et rappelées à tout moment. L'exemple qui suit va donner | ||
479 | l'occasion d'étudier une nouvelle commande, \verb|echo|, dont le rôle | ||
480 | est justement de retourner au terminal la chaîne de caractères qu'on | ||
481 | lui passe en argument: | ||
482 | \begin{minted}[linenos]{text} | ||
483 | [robert@kiddo courses]$ mysystem="Linux" | ||
484 | [robert@kiddo courses]$ echo 'Mon système est $mysystem.' | ||
485 | Mon système est $mysystem. | ||
486 | [robert@kiddo courses]$ echo "Mon système est $mysystem." | ||
487 | Mon système est Linux. | ||
488 | \end{minted} | ||
489 | |||
490 | \begin{quoting} | ||
491 | \textbf{Commentaire:} | ||
492 | \begin{description} | ||
493 | \item[Définition] Pour \emph{définir une variable}, on lui donne un | ||
494 | nom, suivi du signe $=$, suivi de sa définition entre guillemets | ||
495 | droits. | ||
496 | \item[Rappel] Pour \emph{rappeler} la valeur d'une variable, on | ||
497 | saisit le nom qu'on lui a donné, préfixé par le signe \verb|$|. | ||
498 | \end{description} | ||
499 | \begin{mdframed}[backgroundcolor=Cyan] | ||
500 | Observez la différence dans l'usage des guillemets! | ||
501 | \href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L554}{Comme | ||
502 | on le sait}, les guillemets servent à indiquer au \emph{shell} | ||
503 | que les espaces ne sont pas des caractères actifs. Il y a | ||
504 | cependant une grande différence entre les guillemets simples et | ||
505 | les guillemets doubles: les premiers renvoient une expression | ||
506 | littérale dans laquelle rien n'est interprété (lignes~2--3) tandis | ||
507 | que les seconds permettent l'interprétation des variables | ||
508 | (lignes~4--5). | ||
509 | \end{mdframed} | ||
510 | \end{quoting} | ||
511 | |||
512 | Certaines variables sont automatiquement définies par \emph{bash}. Par | ||
513 | exemple: | ||
514 | \begin{enumerate} | ||
515 | \item \verb|$0|: renvoie le nom du script en cours d'exécution. | ||
516 | \item \verb|$1 - $9|: désignent les arguments successifs passés au | ||
517 | script. | ||
518 | \end{enumerate} | ||
519 | |||
520 | Nous pouvons désormais perfectionner le script \verb|backup.sh|: | ||
521 | \begin{minted}[linenos]{bash} | ||
522 | #!/bin/bash | ||
523 | echo "Veuillez choisir l'extension des fichiers à sauvegarder" | ||
524 | echo "(sans le point):" | ||
525 | read -p 'extension: ' ext | ||
526 | echo "Veuillez choisir le nom du dossier de sauvegarde:" | ||
527 | read -p 'dossier: ' backupdir | ||
528 | mkdir "$backupdir" | ||
529 | cp *.$ext "$backupdir" | ||
530 | zip -r "$backupdir".zip "$backupdir" | ||
531 | echo "Terminé. $0 a copié vos fichiers .$ext dans $backupdir" | ||
532 | echo "et l'archive $backupdir.zip a été créée." | ||
533 | \end{minted} | ||
534 | |||
535 | \paragraph{read} | ||
536 | Cette nouvelle commande est expliquée dans le commentaire qui suit: | ||
537 | \begin{quoting} | ||
538 | \textbf{Commentaire:} | ||
539 | \begin{enumerate} | ||
540 | \item Une nouvelle commande a été introduite ici: aux lignes~4 et 6, | ||
541 | \verb|read| attend que l'utilisateur saisisse quelque chose au | ||
542 | clavier. Ensuite, la valeur saisie au clavier est associée à une | ||
543 | variable qui peut être reprise dans le script. On a également | ||
544 | passé à \verb|read| l'option \verb|-p| qui permet d'ajouter un | ||
545 | \emph{prompt} spécifique. | ||
546 | \item Aux lignes 7, 8 et 9, on a pris la précaution de mettre entre | ||
547 | guillemets doubles le rappel de la variable: | ||
548 | \verb|"$backupdir"|. On sait en effet que beaucoup d'utilisateurs | ||
549 | utilisent les espaces dans les noms des fichiers. Ici, la variable | ||
550 | étant rappelée à l'intérieur de guillemets doubles, elle sera | ||
551 | toujours interprétée correctement par \emph{bash}. | ||
552 | \end{enumerate} | ||
553 | \end{quoting} | ||
554 | |||
555 | Exécution du script \verb|./backup.sh tex|: | ||
556 | \begin{minted}[linenos]{text} | ||
557 | [robert@kiddo courses]$ ./backup.sh | ||
558 | Veuillez choisir l'extension des fichiers à sauvegarder | ||
559 | (sans le point): | ||
560 | extension: tex | ||
561 | Veuillez choisir le nom du dossier de sauvegarde: | ||
562 | dossier: Houba | ||
563 | adding: Houba/ (stored 0%) | ||
564 | adding: Houba/README.tex (deflated 57%) | ||
565 | adding: Houba/_preamble.tex (deflated 45%) | ||
566 | adding: Houba/_preamble_bbl.tex (deflated 57%) | ||
567 | adding: Houba/_preamble-ed.tex (deflated 44%) | ||
568 | Terminé. ./backup.sh a copié vos fichiers .tex dans Houba | ||
569 | et l'archive Houba.zip a été créée. | ||
570 | \end{minted} | ||
571 | \begin{quoting} | ||
572 | \textbf{Commentaire:} | ||
573 | \begin{enumerate} | ||
574 | \item Les valeurs attendues ont été saisies par l'utilisateur aux | ||
575 | lignes~4 et 6. | ||
576 | \item À la ligne~12, le script a utilisé la variable \verb|$0| pour | ||
577 | retourner son propre nom. | ||
578 | \end{enumerate} | ||
579 | \end{quoting} | ||
580 | |||
581 | \section{Captures et substitutions} | ||
582 | \label{sec:capt-et-subst} | ||
583 | Cette technique simple permet de transformer en variable le résultat | ||
584 | d'une commande. Il suffit de placer la commande entre parenthèses | ||
585 | précédées du signe $=$. Exemple: | ||
586 | \begin{minted}[linenos]{text} | ||
587 | [robert@kiddo courses]$ nbre=$(ls | wc -l) | ||
588 | [robert@kiddo courses]$ echo $nbre | ||
589 | 8 | ||
590 | \end{minted} | ||
591 | |||
592 | \needspace{2\baselineskip} | ||
593 | \begin{quoting} | ||
594 | \textbf{Commentaire:} | ||
595 | \begin{enumerate} | ||
596 | \item À la ligne~1, la commande \verb|ls| liste les fichiers, puis | ||
597 | son résultat est interprété par \verb|wc -l| qui compte le nombre | ||
598 | de fichiers retournés. | ||
599 | \item La variable \verb|$nbre| contient donc ce dernier résultat. | ||
600 | \end{enumerate} | ||
601 | \end{quoting} | ||
602 | |||
603 | Utilisons cette technique pour perfectionner notre script | ||
604 | \verb|backup.sh| (voir ci-dessous la ligne~9): | ||
605 | \begin{minted}[linenos]{bash} | ||
606 | #!/bin/bash | ||
607 | echo "Veuillez choisir l'extension des fichiers à sauvegarder" | ||
608 | echo "(sans le point):" | ||
609 | read -p 'extension: ' ext | ||
610 | echo "Veuillez choisir le nom du dossier de sauvegarde:" | ||
611 | read -p 'dossier: ' backupdir | ||
612 | mkdir "$backupdir" | ||
613 | cp *.$ext "$backupdir" | ||
614 | nbre=$(ls $backupdir/*.$ext | wc -l) | ||
615 | zip -r "$backupdir".zip "$backupdir" | ||
616 | echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" | ||
617 | echo "et l'archive $backupdir.zip a été créée." | ||
618 | \end{minted} | ||
619 | |||
620 | Exécution: | ||
621 | \begin{minted}[linenos]{text} | ||
622 | [robert@kiddo courses]$ ./backup.sh | ||
623 | Veuillez choisir l'extension des fichiers à sauvegarder | ||
624 | (sans le point): | ||
625 | extension: tex | ||
626 | Veuillez choisir le nom du dossier de sauvegarde: | ||
627 | dossier: Houba | ||
628 | adding: Houba/ (stored 0%) | ||
629 | adding: Houba/README.tex (deflated 57%) | ||
630 | adding: Houba/_preamble.tex (deflated 45%) | ||
631 | adding: Houba/_preamble_bbl.tex (deflated 57%) | ||
632 | adding: Houba/_preamble-ed.tex (deflated 44%) | ||
633 | Terminé. ./backup.sh a copié 4 fichiers .tex dans Houba | ||
634 | et l'archive Houba.zip a été créée. | ||
635 | \end{minted} | ||
636 | |||
475 | \hfill\verb|../..| à suivre | 637 | \hfill\verb|../..| à suivre |
476 | 638 | ||
477 | \end{document} | 639 | \end{document} |