Objectifs
- Comprendre ce que sont un shell et Bash.
- Identifier les contextes où l’utilisation de Bash est pertinente.
- Savoir interagir avec le terminal pour exécuter des commandes simples.
- Connaître les premières bonnes pratiques pour écrire des scripts robustes.
Explications détaillées
Notions clés
Le Shell : Votre interpréteur de commandes
Un shell (coquille en anglais) est une interface qui vous permet de communiquer avec le système d’exploitation (comme Linux, macOS ou même Windows) en utilisant des commandes textuelles. C’est un programme qui prend vos instructions et les “traduit” pour que le noyau (le cœur) du système puisse les exécuter.
Imaginez le système d’exploitation comme un chef cuisinier très compétent mais qui ne parle qu’une langue technique. Le shell est le serveur qui prend votre commande (ce que vous voulez faire) et la transmet au chef dans un langage qu’il comprend.
Il existe plusieurs types de shells, comme sh, zsh, fish, et bien sûr, bash.
Bash : Le shell le plus populaire
Bash est l’acronyme de Bourne-Again SHell. C’est une version améliorée du shell original (sh), créé par Brian Fox pour le projet GNU. Aujourd’hui, c’est le shell par défaut sur la majorité des distributions Linux et sur macOS, ce qui en fait un standard de fait dans le monde du développement et de l’administration système.
Où et pourquoi l’utiliser ?
Vous utiliserez Bash dans une fenêtre appelée terminal ou console. Voici pourquoi c’est un outil indispensable :
- Automatisation des tâches ⚙️ : La plus grande force de Bash est sa capacité à automatiser des actions répétitives. Au lieu de cliquer sur des boutons pour renommer 100 fichiers, vous pouvez écrire une seule ligne de commande qui le fait en une seconde.
- Administration système 🖥️ : Pour gérer des serveurs, installer des logiciels, configurer des réseaux ou surveiller l’état d’un système, Bash est l’outil principal. La plupart des serveurs n’ont pas d’interface graphique, donc tout se fait via la ligne de commande.
- Accès direct au système : Bash vous donne un contrôle beaucoup plus fin et direct sur le système que n’importe quelle interface graphique.
- Développement logiciel 🧑💻 : Les développeurs l’utilisent quotidiennement pour compiler du code, gérer des versions avec Git, se connecter à des serveurs distants (via SSH), et bien plus encore.
En résumé, apprendre Bash, c’est apprendre le langage universel pour “parler” à un ordinateur de manière efficace et puissante.
Syntaxe / Usages
L’interaction de base avec Bash se fait en tapant une commande et en appuyant sur Entrée. La structure typique est :
commande [options] [arguments]
- Commande : Le nom du programme à exécuter (ex:
lspour lister des fichiers). - Options (ou “flags”) : Elles modifient le comportement de la commande. Elles commencent souvent par un ou deux tirets (ex:
ls -lpour un affichage détaillé). - Arguments : Ce sont les “cibles” de la commande (ex:
ls -l /home/userpour lister le contenu du dossier/home/user).
Exemples
# Affiche "Bonjour, monde !" dans le terminal.
# 'echo' est la commande pour afficher du texte.
echo "Bonjour, monde !"
# Liste les fichiers et dossiers dans le répertoire courant.
# 'ls' est la commande pour lister.
ls
# Affiche le chemin du répertoire dans lequel vous vous trouvez actuellement.
# 'pwd' signifie "Print Working Directory".
pwd
# Crée un nouveau dossier nommé "mon_projet".
# 'mkdir' signifie "Make Directory".
mkdir mon_projet
Bonnes pratiques
Ces règles aident à écrire des scripts plus sûrs et plus fiables.
- Utiliser
set -euo pipefailau début des scripts :set -e: Le script s’arrête immédiatement si une commande échoue.set -u: Le script s’arrête si vous essayez d’utiliser une variable qui n’a pas été définie.set -o pipefail: La valeur de retour d’une série de commandes pipées (|) est celle de la dernière commande qui a échoué (et non celle de la toute dernière).
- Citer systématiquement les variables
"${var}": Mettre des guillemets doubles autour des variables empêche le shell de mal interpréter les espaces ou les caractères spéciaux qu’elles pourraient contenir. - Préférer les substitutions sûres et les chemins absolus :
- Utilisez
$(commande)plutôt que les backticks (`commande`) car c’est plus lisible et peut être imbriqué. - Utilisez des chemins complets (ex:
/home/user/script.sh) au lieu de chemins relatifs (./script.sh) dans les contextes où le répertoire d’exécution peut changer (crontabs, services).
- Utilisez
Pièges courants
- Oublier les guillemets →
rm ${mon_dossier}peut devenirrm mon dossiersi la variable contient un espace, ce qui effacerait deux répertoires distincts ! C’est le “word splitting” et le “globbing” indésirables. - Confondre
[et[[:[[est une version plus moderne et plus sûre de[pour faire des tests. Elle gère mieux les chaînes vides et offre plus de fonctionnalités, comme la comparaison de motifs ([[ "abc" == a* ] seizing_opportunities_globbing>). - Faire des boucles sur la sortie de
ls: Une commande commefor file in $(ls *.txt)plantera si un nom de fichier contient un espace. Il faut utiliser des bouclesfor file in *.txtoufindavecwhile read.
Exercices
-
Reproduire et explorer :
- Ouvrez un terminal.
- Tapez
pwdpour voir où vous êtes. - Créez un dossier avec
mkdir introduction_bash. - Entrez dans ce dossier avec
cd introduction_bash. - Créez un fichier vide nommé
test.txtavec la commandetouch test.txt. - Listez le contenu du dossier avec
ls -lpour voir les détails du fichier créé.
-
Écrire un mini-script :
- Dans le dossier
introduction_bash, créez un fichier nomméaccueil.sh. - Ouvrez-le avec un éditeur de texte (comme
nanoouvim) et écrivez le contenu suivant :#!/bin/bash set -euo pipefail # Ce script salue l'utilisateur et affiche la date. echo "Bienvenue dans le monde de Bash, $(whoami) !" echo "Nous sommes le : $(date)" - Rendez le script exécutable avec la commande
chmod +x accueil.sh. - Exécutez-le avec
./accueil.sh.
- Dans le dossier
-
Ajouter une aide simple :
- Modifiez votre script
accueil.shpour qu’il affiche un message d’aide si l’utilisateur passe l’argument-hou--help. Indice : vous aurez besoin d’une conditionif. - Testez votre script en l’exécutant avec et sans l’argument d’aide.
- Modifiez votre script