This commit is contained in:
tTh 2024-08-08 15:33:18 +02:00
parent f3289fc23c
commit f00a06b0c7

View File

@ -39,24 +39,47 @@ Thu Oct 5 00:53:01 UTC 2023
tth@redlady:~$ tth@redlady:~$
\end{verbatim} \end{verbatim}
Ces ordres peuvent être des commandes internes à l'interpréteur,
d'autres seront des commandes fournies par des exécutables
externes. Pour le début, la différence n'est pas importante.
Mais comment le shell fait-il pour retrouver tous les outils
dont il a besoin ? Simplement, il connait une liste
d'endroits où aller chercher, une sorte de chemin de recherche,
c'est d'ailleurs pour ça que cette liste
est nommée \texttt{PATH}\index{PATH}.
Il est très simple de la visualiser~:
\begin{verbatim}
tth@redlady:~/Devel/TetaTricks$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
\end{verbatim}
% ============================================================== % ==============================================================
\section{Langage}\index{script} \section{Un langage}\index{script}
Le shell est aussi, et surtout, un langage de programmation, parfois Le shell est aussi, et surtout, un langage de programmation
appelé \textsl{glue-language} parce qu'il permet de "coller" ensemble à part entière.
plusieurs opérations élémentaires, d'abord avec ses opérateurs internes Il est parfois appelé \textsl{glue-language} parce qu'il permet de
et ensuite l'utilisation d'outils "coller" ensemble plusieurs opérations élémentaires, d'abord avec
extérieurs\footnote{Grep, Sed, Awk, BwBasic...} ses opérateurs internes et ensuite par l'utilisation d'outils
extérieurs\footnote{Grep, Sed, Awk, BwBasic, Sort, Gfortran...}
divers. C'est \textsl{très} efficace. divers. C'est \textsl{très} efficace.
Nous allons commencer par voir quelques notions liées à
la création d'un script exécutable, puis d'un enchainement
de commandes.
Nous passerons ensuite aux structures de contrôle, comme les
tests et les boucles.
% -------------------------------------------------------------- % --------------------------------------------------------------
\subsection{Le \textsc{shebang}} \index{shebang} \subsection{Le shebang} \index{shebang}
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
au tout début d'un script shell. au tout début d'un script shell.
Le 'she' est l'abréviation de 'sharp', coupant en français. C'est Le 'she' est l'abréviation de 'sharp', qui veut dire 'coupant' en français.
C'est
probablement une allusion aux cotés tranchants du \texttt{\#}. probablement une allusion aux cotés tranchants du \texttt{\#}.
Quand au 'bang', c'est le point d'exclamation après l'explosion Quand au 'bang', c'est le point d'exclamation après l'explosion
de la forkbomb. de la forkbomb.
@ -67,6 +90,26 @@ octets. Si les deux premiers sont \textsl{0x23 0x21}, le reste
de la première ligne sera interprété pour lancer un autre exécutable, de la première ligne sera interprété pour lancer un autre exécutable,
avec un traitement particuler des options. avec un traitement particuler des options.
Et à ce momment-là des explications, on entend Serguey qui hurle
du fond de la salle « schmod777 en force ! ».
Et il a bien raison. En effet, ce fichier doit être vu comme
possiblement exécutable selon les droits 'X' qu'il a.
Il y a une commande prévue à cet effet, dont nous allons voir
l'usage à l'instant, avec la création d'un script complet~:
\begin{verbatim}
tth@redlady:~$ echo '#!/bin/bash' > foo.sh
tth@redlady:~$ echo 'printf "%d" 85 >> foo.sh
tth@redlady:~$ chmod u+x ./foo.sh
tth@redlady:~$ ./foo.sh
55
tth@redlady:~$ cat foo.sh
#!/bin/bash
printf "%x\n" 85
tth@redlady:~$
\end{verbatim}
% ============================================================== % ==============================================================
\section{Le pipeline}\index{pipeline}\label{pipeline} \section{Le pipeline}\index{pipeline}\label{pipeline}
@ -96,6 +139,8 @@ $
\section{Structures de contrôle} \section{Structures de contrôle}
Les plus importantes sont là : le choix, la boucle, l'attente.
% -------------------------------------------------------------- % --------------------------------------------------------------
\subsection {Les tests} \subsection {Les tests}