2020-11-02 23:08:45 +01:00
|
|
|
\chapter{Le Shell}\index{shell}
|
2020-11-16 19:45:21 +01:00
|
|
|
\label{chap:shell}
|
2020-11-02 23:08:45 +01:00
|
|
|
|
2021-10-04 22:24:01 +02:00
|
|
|
Le \texttt{shell} est le coquillage qui isole le
|
|
|
|
MC/P\footnote{Master Control Program} des yusers.
|
2020-11-02 23:08:45 +01:00
|
|
|
En gros, hein, je vais simplifier, et me limiter aux
|
|
|
|
bricolages constructifs et/ou amusant. Il y aura du gore\index{gore}
|
2023-04-02 23:32:29 +02:00
|
|
|
aussi, parce que le shell est à la fois un interpréteur de commande
|
|
|
|
et un langage de programmation.
|
|
|
|
Ces deux notions ont beaucoup de choses en commun, comme nous
|
|
|
|
allons essayer de le voir.
|
|
|
|
|
|
|
|
Nous allons nous concentrer sur le \textsl{Bourne again shell}
|
|
|
|
(aka \texttt{bash}\footnote{aka GNU/shell ?}) qui est un des plus
|
|
|
|
répandus, du moins dans le monde Linux\index{Linux}.
|
|
|
|
Mais il en existe d'autres : sh, ksh, ash, zsh, tthsh\dots
|
2020-11-16 19:45:21 +01:00
|
|
|
|
2020-11-02 23:08:45 +01:00
|
|
|
% ==============================================================
|
|
|
|
|
|
|
|
\section{Interpréteur}\index{cli}
|
|
|
|
|
2023-06-29 11:23:11 +02:00
|
|
|
Ceci est un prompt. Son petit nom est \texttt{PS1}. On peut y
|
|
|
|
mettre plein d'informations utiles et de \textsl{mises en forme} assez
|
|
|
|
funky\footnote{Un peu de calme, fatalerrors !} permettant
|
|
|
|
d'enhancer la reliability de votre UI/UX.
|
2020-11-02 23:08:45 +01:00
|
|
|
|
|
|
|
% ==============================================================
|
|
|
|
|
|
|
|
\section{Langage}\index{script}
|
|
|
|
|
2023-06-29 11:23:11 +02:00
|
|
|
Le shell est aussi, et surtout, un langage de programmation, parfois
|
|
|
|
appelé \textsl{glue-language} parce qu'il permet de "coller" ensemble
|
|
|
|
plusieurs opérations élémentaires, d'abord avec ses opérateurs internes
|
|
|
|
et ensuite l'utilisation d'outils
|
|
|
|
extérieurs\footnote{Grep, Sed, Awk, BwBasic...}
|
|
|
|
divers. C'est \textsl{très} efficace.
|
|
|
|
|
|
|
|
\subsection{Le \textsc{shebang}} \index{shebang}
|
|
|
|
|
|
|
|
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
|
|
|
|
au tout début d'un script shell.
|
|
|
|
Le 'she' est l'abréviation de 'sharp', coupant en français. C'est
|
|
|
|
probablement une allusion aux cotés tranchants du \texttt{\#}.
|
|
|
|
Quand au 'bang', c'est le point d'exclamation après l'explosion
|
|
|
|
de la forkbomb.
|
|
|
|
|
|
|
|
Quand on demande au noyau\index{kernel} d'exécuter un fichier
|
|
|
|
\texttt{(man 3 exec}), il va en lire d'abord les premiers
|
|
|
|
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,
|
|
|
|
avec un traitement particuler des options.
|
2020-11-02 23:08:45 +01:00
|
|
|
|
|
|
|
% ==============================================================
|
2021-08-01 14:53:41 +02:00
|
|
|
\section{Le pipeline}\index{pipeline}\label{pipeline}
|
|
|
|
|
2023-06-29 11:23:11 +02:00
|
|
|
Une invention géniale, dont vous pouvez voir un exemple d'utilisation
|
|
|
|
par un gadget sonore en page \pageref{say-uptime} et
|
2021-08-01 14:53:41 +02:00
|
|
|
un bout de code C en page \pageref{filtre-unix}.
|
|
|
|
|
2023-06-29 11:23:11 +02:00
|
|
|
Exemple rapide~:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
$ uptime | tr " " "X"
|
|
|
|
X09:22:29XupX33Xdays,X14:00,XX8Xusers,XXloadXaverage:X0.12,X0.17,X0.17
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
% ==============================================================
|
|
|
|
\section{Les \textsl{locales}}
|
|
|
|
\index{locales}
|
|
|
|
|
|
|
|
% new: Mon Apr 17 10:54:45 UTC 2023
|
|
|
|
|
|
|
|
Quelle sont les différences entre \texttt{en\_US.UTF-8} et
|
|
|
|
\texttt{C.UTF-8} ?
|
|
|
|
|
2021-02-04 09:56:36 +01:00
|
|
|
% ==============================================================
|
2020-11-02 23:08:45 +01:00
|
|
|
\section{Questions à voir}
|
|
|
|
|
2020-11-16 19:45:21 +01:00
|
|
|
\begin{itemize}
|
|
|
|
\item le traitement des chaines de caractères\dots
|
2023-06-29 11:23:11 +02:00
|
|
|
\item la gestion des co-routines\dots
|
2020-11-16 19:45:21 +01:00
|
|
|
\end{itemize}
|
2020-11-02 23:08:45 +01:00
|
|
|
|
|
|
|
|
|
|
|
% ==============================================================
|