From 7669c6247493285bd9202115d421df65e5b3069e Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Sun, 16 Sep 2018 21:27:27 +0200 Subject: still writing 03-grep-bash.tex --- _preamble.tex | 4 +- _preamble_bbl.tex | 20 ++++++ bibliography.bib | 6 ++ fichiers/03-grep-bash.tex | 165 +++++++++++++++++++++++++++++++++++++++++++++- makefile | 2 +- 5 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 _preamble_bbl.tex create mode 100644 bibliography.bib diff --git a/_preamble.tex b/_preamble.tex index 78a8b52..5573be8 100644 --- a/_preamble.tex +++ b/_preamble.tex @@ -20,4 +20,6 @@ \mailto[courses]{robert.alessi@cnrs.fr} \doclicenseThis} \usepackage{widows-and-orphans} -\WaOsetup{avoid-all} \ No newline at end of file +\WaOsetup{avoid-all} + +\usepackage{microtype} diff --git a/_preamble_bbl.tex b/_preamble_bbl.tex new file mode 100644 index 0000000..d7be120 --- /dev/null +++ b/_preamble_bbl.tex @@ -0,0 +1,20 @@ +\usepackage[style=footnote-dw, xref=true, loccittracker, opcittracker, +autopunct=false, ibidemfont=italic, idemfont=italic, +idembibformat=dash, nopublisher=false, annotation=true, pageref=true, +journalnumber=date, acronyms=true]{biblatex} + +\DefineBibliographyExtras{french}{% + \renewcommand{\mkbibnamefamily}[1]{#1}% +} +\renewcommand{\mkbibacro}[1]{% + \textls[55]{\scalefont{0.95}#1}\isdot} +\renewcommand{\labelnamepunct}{\addperiod\space} +\DeclareLanguageMapping{french}{french-dw} +\DeclareFieldFormat[book]{title}{\mkbibemph{#1}} +\DeclareFieldFormat[book]{citetitle}{\mkbibemph{#1}} +\DeclareFieldFormat[article]{title}{\mkbibquote{#1}} +\DeclareFieldFormat[article]{citetitle}{\mkbibquote{#1}} +\DeclareFieldFormat[inreference]{citetitle}{\mkbibquote{#1}} +\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}} +\DeclareFieldFormat{citejournaltitle}{\mkbibemph{#1}} +\addbibresource{../bibliography.bib} diff --git a/bibliography.bib b/bibliography.bib new file mode 100644 index 0000000..ec8c1eb --- /dev/null +++ b/bibliography.bib @@ -0,0 +1,6 @@ +@Online{Knuth1983, + author = {Knuth, Donald E.}, + title = {Literate Programming}, + year = 1983, + url = {http://www.literateprogramming.com/knuthweb.pdf}} + diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index 21ed846..1be7502 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex @@ -1,4 +1,5 @@ \input{../_preamble} +\input{../_preamble_bbl} \usepackage{menukeys} \title{grep et bash} \usepackage{units} @@ -17,6 +18,7 @@ breaksymbolright=\small\carriagereturn} \setmintedinline{bgcolor=Lavender} \usepackage{soul} + \begin{document} \maketitle \renewcommand{\contentsname}{Sommaire} @@ -88,7 +90,13 @@ symboles suivants\footnote{Cette liste n'est pas exhaustive.}: \verb|[^abc]| & le caractère précédent n'est pas l'un de ceux qui se trouvent entre les crochets droits\\ \verb|[a-z]| & le caractère précédent est compris entre \emph{a} et - \emph{z}, dans l'ordre de la table des caractères \\ + \emph{z}, dans l'ordre de la table des + caractères. C'est le sens du trait d'union entre les + lettres \verb|a| et \verb|z|. On peut bien sûr + combiner des chaînes avec et sans trait d'union. Par + exemple, \verb|[A-Ea-e]| correspond aux cinq + premières lettres de l'alphabet, en majuscule et en + minuscule. \\ \verb|()| & ce qui est inclus entre les parenthèses est traité comme un groupe \\ @@ -182,4 +190,159 @@ booty meets shoot steen sweet tepee troop \end{enumerate} \end{quoting} +\chapter{bash} +\label{cha:bash} +Comme on l'a vu, \verb|bash| est le \emph{shell} le plus répandu sur +les systèmes Linux aujourd'hui. On peut écrire en \verb|bash| des +\emph{scripts}, autrement dit de petits programmes informatiques, pour +réaliser des suites d'opérations plus ou moins complexes. + +Voici un exemple très simple. Prenons les lignes suivantes: +\begin{minted}[linenos]{text} +mkdir sauvegarde +cp *.tex sauvegarde +zip -r sauvegarde.zip sauvegarde +\end{minted} +Ces trois lignes exécutent successivement les opérations suivantes: +\begin{enumerate} +\item Création d'un répertoire intitulé \verb|sauvegarde| +\item Copie de tous les fichiers \TeX{} dans le répertoire + \verb|sauvegarde| +\item Création d'une archive \verb|.zip| de tout le répertoire. +\end{enumerate} + +Pour éviter de répéter ces trois lignes de commande et d'encourir le +risque de se tromper dans la saisie, on peut décider de les écrire +dans un fichier texte que l'on appellera par exemple \verb|backup.sh| +de la façon suivante: +\begin{minted}[linenos]{bash} +#!/bin/bash +mkdir sauvegarde +cp *.tex sauvegarde +zip -r sauvegarde.zip sauvegarde +\end{minted} + +Il suffit alors de demander à \verb|bash| d'exécuter ce fichier pour +que les trois opérations soient réalisées d'un coup. Comme les scripts +écrits en \verb|bash| sont interprétés par le \textsl{shell} +\verb|bash|, \emph{toute ligne de commande peut être exécutée dans un + script}. Réciproquement, \emph{tout ce qui peut entrer dans un + script peut aussi être exécuté à la ligne de commande}. + +\section{L'éditeur de texte} +\label{sec:lediteur-de-texte} +C'est dans un \emph{éditeur de texte} que l'on saisit tout code +informatique. Certains éditeurs de texte sont très simples à +utiliser. Nous allons prendre ici l'exemple de l'un des plus simples, +\verb|nano|. Pour le lancer, il suffit de saisir à la ligne de +commande: \mintinline{text}|nano|. Après avoir lancé \verb|nano| et +saisi le script donné ci-dessus, voici ce que l'on obtient: +\begin{minted}[linenos,fontsize=\footnotesize]{text} + GNU nano 2.8.2 Nouvel espace + +#!/bin/bash +mkdir sauvegarde +cp *.tex sauvegarde +zip -r sauvegarde.zip sauvegarde + + + + + + + + + + + + + + + + + +^G Aide ^O Écrire ^W Chercher ^K Couper ^J Justifier ^C Pos. cur. +^X Quitter ^R Lire fich.^\ Remplacer ^U Coller ^T Orthograp.^_ Aller lig. +\end{minted} + +Les lignes 24 et 25 correspondent au menu de \verb|nano|. On n'y +accède pas par la souris, mais à l'aide des \emph{raccourcis clavier} +qui sont tous préfixés par le \emph{caret} (\verb|^|) qui représente +la touche \keys{Ctrl} du clavier. Donc pour quitter le programme, on +appuiera sur \keys{Ctrl-X}: voici ce que montre \verb|nano| au bas du +terminal après avoir saisi \keys{Ctrl-X}: +\begin{minted}[linenos,fontsize=\footnotesize]{text} +Écrire l'espace modifié ? (Répondre « Non » ABANDONNE les modifications.) + O Oui + N Non ^C Annuler +\end{minted} +Les opérations suivantes sont donc possibles: +\begin{enumerate} +\item \keys{O}: sauvegarde le fichier. +\item \keys{N}: quitte \verb|nano| sans sauvegarder. +\item \keys{Ctrl-C}: annule l'opération et retourne à l'éditeur de texte. +\end{enumerate} +Appuyons sur la touche \keys{O}. \verb|nano| nous invite alors à +entrer le nom du script: +\begin{minted}[linenos,fontsize=\footnotesize]{text} +Nom du fichier à écrire: backup.sh +^G Aide M-D Format DOS M-A Ajout (à la fin)M-B Copie de sécu. +^C Annuler M-M Format Mac M-P Ajout (au début)^T Parcourir +\end{minted} +Après avoir entré le nom du fichier et appuyé sur la touche +\keys{Enter} pour confirmer le choix, on retourne au terminal et à la +ligne de commande. + +\section{Le \emph{shebang}} +\label{sec:le-shebang} +La première ligne du script \verb|backup.sh| donné en exemple +ci-dessus appelle un commentaire particulier: +\begin{minted}[linenos]{bash} +#!/bin/bash +\end{minted} + +Dans cette ligne, la séquence \mintinline{bash}|#!| s'appelle le +\emph{shebang}. Par convention, le \emph{shebang} est un préfixe que +l'on fait suivre du nom du programme qui doit interpréter le script, +précédé de son chemin d'accès absolu. + +Le \emph{shebang} est important car il permet d'accéder aux +interpréteurs auxquels on souhaite accéder depuis la ligne de +commande. Par exemple, pour un script écrit en Python2, la première +ligne sera: +\begin{minted}[linenos]{python} +#!/usr/bin/env python2 +""" + Mon premier script en Python +""" +print("bonjour le monde!") +\end{minted} + +\section{Les commentaires} +\label{sec:les-commentaires} +En \verb|bash|, tout ce qui, sur une même ligne, suit le signe +\mintinline{bash}|#| \emph{n'est ni interprété, ni exécuté}. On +utilise donc ce signe pour introduire des \emph{commentaires} dans le +code informatique. + +Les commentaires ne servent pas uniquement à introduire des remarques +pour son usage personnel. Ils servent aussi, et surtout, à donner des +indications sur le code lui-même pour permettre aux autres de mieux +comprendre la programmation. Si le code est bien commenté, alors on +doit pouvoir le lire comme on lit un livre. Cela est très important +car les programmes longs et complexes dépassent souvent et parfois +même survivent à leur auteur. + +Si le code est bien compris, il sera facilement mis à jour, corrigé et +augmenté par d'autres programmeurs. + +L'art de commenter le code informatique tout en l'écrivant porte le +nom de \emph{literate programming}. Il a été inventé par Donald +E.~Knuth, le créateur de \TeX, qui a posé tous les principes de cet +art dans le cadre de la programmation en +\textsf{WEB}\footnote{\cite{Knuth1983}. Voir également en ligne + \url{http://www.literateprogramming.com/}}. + +\hfill\verb|../..| à suivre + \end{document} diff --git a/makefile b/makefile index 9beff49..7ec9fe0 100644 --- a/makefile +++ b/makefile @@ -12,7 +12,7 @@ pdf: clean clean: rm -rf .backup find -iname "*~" | xargs rm -rf - find ./* -type f | grep 'makefile\|\.md$$\|\.png$$\|\.tex$$' > ls-R + find ./* -type f | grep 'makefile\|\.md$$\|\.png$$\|\.bib$$\|\.tex$$' > ls-R rsync -avPr --files-from=ls-R . .backup # cp ls-R .backup rm -rf * -- cgit v1.2.3