> Les systèmes d'exploitations Linux étant notamment dans le domaine des serveurs informatique - en opposition aux machines dites "clients" - il est courant de n'utiliser qu'un seul outil pour les contrôler : Bash, l'interprète de commande.
Contrairement aux systèmes "user-friendly", comprendre, simple d'utilisation, les machines sous Linux ont la réputation d'être réservées aux utilisateurs et utilisatrices qui maîtrisent leur sujet.
Heureusement pour nous, ça n'est pas aussi compliqué que cela en a l'air. Dans [l'activité Terminus](terminus.ipynb) que nous avions faite, nous avons appris certaines commandes linux, dans le but de progresser dans le jeu. Ici, cela sera pareil, l'interface de jeu en moins évidemment ;)
### Un peu de culture
Sous windows, macOS ou GNU/Linux, chaque système propose son propre interpreteur de commande :
- BASH (Bourne Again Shell)
- principalement sous linux et macOS , mais disponible sous windows.
- Chaque version utilise son propre langage pour utiliser les commandes systèmes, mais en général, vous pouvez vous y retrouver d'un OS à un autre, avec les bonnes bases.
Il existe autant de langage de programmation qu’il existe de besoins. Aucun d’entre eux n’est meilleur qu’un autre, il n'y a que des langages plus efficaces que d’autres selon les situations.
Dans notre cas, afin d’être capable d’opérer une administration des systèmes efficace, le langage **Shell** est un must have.
La syntaxe de **Shell**, à la fois simple et efficace, permet à n’importe qui de pouvoir « *programmer* » de cette manière. La plupart des fonctions et opérations propres au **Shell** sont faciles à retenir, de plus, les scripts fonctionneront souvent du premier coup si vous maitrisez un tant soit peu le langage.
### Définition
> Le **Shell** est un interpréteur de commandes, ainsi qu’un langage de programmation puissant.
Un programme **Shell**, que l’on peut appeler également un **script**, est un outil facile à prendre en main afin de construire des applications en « regroupant » des appels système, outils, utilitaires et binaires compilés.
Un **script Shell** permet, en théorie, d’accéder à l’entièreté des commandes **UNIX**, des utilitaires et des outils systèmes.
Le Shell est particulièrement efficace lorsque l’on effectue de l’administration système mais aussi pour d’autres routines répétitives ne nécessitant pas des utilisations aussi poussées qu’avec un langage de programmation plus complet.
-------------------
### Comment ?
Dans le cas le plus simple, un **script** n'est rien de plus qu'une liste de commandes système enregistrées dans un fichier, ligne par ligne. Cela évite l'effort de retaper cette séquence particulière de commandes à chaque fois qu'elle doit être appelée.
Par exemple, pour se déplacer dans un répertoire puis créer un dossier, on utilise le **bash** (ou un autre interpréteur de commande **UNIX**) :
```
cd Documents/
mkdir test
```
Eh bien si l’on souhaite faire la même chose avec un **script**, il suffira d’écrire ces deux lignes à la suite dans un fichier, c’est tout simple.
Evidemment, placer ces commandes dans un fichier **script** n’a pas uniquement comme intérêt de ne pas avoir à les recopier chaque fois que l’on en a besoin. Le **script** est un outil de travail et peut facilement être modifié ou personnalisé pour une application particulière.
En réalité, il manque juste une chose afin de pouvoir utiliser ces lignes dans un **script**.
Votre fichier script doit comporter **un sha-bang (#!).**
**Le *sha-bang* (#!)** doit se placer en tête du script afin d’indiquer à votre système que ce fichier est un ensemble de commandes à interpréter.
Les caractères **#!** correspondent en fait à un ***nombre magique***, un marqueur spécial qui désigne un type de fichier, ou dans ce cas, **un script Shell** exécutable.
Ensuite, après le **sha-bang,** se trouve un *chemin*, qui mène au programme sensé interpréter les commandes de votre fichier script, selon le langage que vous utilisez.
Enfin, cet interpréteur de commande exécute les commandes de votre **script**, en commençant après le sha-bang, et en ignorant les commentaires.
Vu qu’ici, nous utilisons l’interpréteur bash, voici la ligne correspondante :
```
#!/bin/bash
```
-------------
### Appeler son script
###
Après la création de votre premier script, vous souhaiterez l’exécuter (on parle ici d’un appel ) afin de vous assurer de son bon fonctionnement.
> Un code de retour zéro du script indique un succès au **Shell**.
Dans cette optique, plusieurs solutions s’offrent à vous :
- Dans un terminal, la commande **sh**<nomduscript>
- Dans un terminal, la commande **bash**<nomduscript>
- Rendre d’abord exécutable ce fichier
- **chmod 555** <nomduscript>(donne les droits de lecture/exécution à tout le monde)
- **chmod +rx** <nomduscript> (donne les droits de lecture et d'exécution à tout le monde)
- **chmod u+rx** <nomduscript>(donne les droits de lecture et d'exécution seulement à son propriétaire)
*Note : si vous placez votre script fonctionnel dans le répertoire /usr/local/bin alors vous serez en mesure de l’appeler simplement en tapant son nom puis entrée dans un terminal.*
> Auteur : Florian Mathieu
>
> Licence CC BY NC
>
> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.