Un script shell est un fichier texte contenant une suite de commandes que Bash exécute automatiquement. Au lieu de taper les mêmes commandes tous les jours, vous les écrivez une fois dans un fichier et vous le lancez en une seule commande. Ce guide vous accompagne dans la création de votre premier script fonctionnel, sans prérequis en programmation.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer un script avec le shebang
#!/bin/bash - Le rendre exécutable avec
chmod +x - Utiliser des variables pour stocker des valeurs
- Lire une entrée utilisateur avec
read - Récupérer des arguments passés au script
- Quitter proprement avec un code de sortie
Créer un script minimal
Section intitulée « Créer un script minimal »-
Créez un fichier nommé
bonjour.sh:Fenêtre de terminal nano bonjour.sh -
Écrivez ce contenu :
#!/bin/bashecho "Bonjour, bienvenue sur $(hostname) !" -
Enregistrez et quittez (Ctrl+O, Entrée, Ctrl+X).
-
Rendez le fichier exécutable :
Fenêtre de terminal chmod +x bonjour.sh -
Lancez le script :
Fenêtre de terminal ./bonjour.sh
Bonjour, bienvenue sur serveur01 !Le shebang : #!/bin/bash
Section intitulée « Le shebang : #!/bin/bash »La première ligne d’un script doit être le shebang :
#!/bin/bashElle indique au système quel interpréteur utiliser pour exécuter le fichier. Sans cette ligne, le système ne sait pas qu’il s’agit d’un script Bash.
Rendre exécutable et lancer
Section intitulée « Rendre exécutable et lancer »Par défaut, un nouveau fichier n’est pas exécutable. Deux étapes sont nécessaires :
chmod +x mon-script.sh./mon-script.shLe ./ indique au shell de chercher le fichier dans le répertoire courant.
Les variables
Section intitulée « Les variables »Une variable stocke une valeur pour la réutiliser :
#!/bin/bashNOM="Alice"MACHINE=$(hostname)echo "Bonjour $NOM, vous êtes sur $MACHINE"Règles :
- Pas d’espaces autour du
= - Pour lire la valeur :
$NOM $(commande)capture le résultat d’une commande
Bonnes pratiques de nommage
Section intitulée « Bonnes pratiques de nommage »| Convention | Exemple |
|---|---|
| Majuscules pour les variables globales | REPERTOIRE, NOM_FICHIER |
| Nom descriptif | FICHIER_LOG plutôt que F |
| Pas de caractères spéciaux | Uniquement lettres, chiffres, _ |
Lire une entrée utilisateur
Section intitulée « Lire une entrée utilisateur »La commande read met le script en pause et attend que l’utilisateur tape
quelque chose :
#!/bin/bashecho "Quel est votre prénom ?"read PRENOMecho "Bonjour $PRENOM !"Pour afficher le message et la saisie sur la même ligne :
read -p "Votre prénom : " PRENOMecho "Bonjour $PRENOM !"Les arguments
Section intitulée « Les arguments »Un script peut recevoir des valeurs au moment du lancement :
./saluer.sh Alice BobCes valeurs sont accessibles via des variables spéciales :
| Variable | Contenu |
|---|---|
$1 | Premier argument (Alice) |
$2 | Deuxième argument (Bob) |
$# | Nombre d’arguments (2) |
$@ | Tous les arguments (Alice Bob) |
$0 | Nom du script (./saluer.sh) |
Exemple complet :
#!/bin/bashecho "Script : $0"echo "Argument 1 : $1"echo "Argument 2 : $2"echo "Nombre d'arguments : $#"Vérifier qu’un argument est fourni
Section intitulée « Vérifier qu’un argument est fourni »Un script robuste vérifie que les arguments nécessaires sont présents :
#!/bin/bashif [ -z "$1" ]; then echo "Usage : $0 <nom>" exit 1fiecho "Bonjour $1 !"-z "$1" teste si le premier argument est vide. Si c’est le cas, le script
affiche un message d’aide et s’arrête.
Les codes de sortie
Section intitulée « Les codes de sortie »Chaque commande (et chaque script) retourne un code de sortie :
| Code | Signification |
|---|---|
0 | Succès |
1 | Erreur générale |
2 | Mauvaise utilisation (arguments incorrects) |
Pour terminer un script avec un code précis :
exit 0 # tout s'est bien passéexit 1 # une erreur s'est produitePour vérifier le code de sortie de la dernière commande :
echo $?Les commentaires
Section intitulée « Les commentaires »Un commentaire commence par #. Le shell ignore tout ce qui suit sur la
ligne :
#!/bin/bash# Ce script affiche un message de bienvenueNOM="Alice" # Variable contenant le prénomecho "Bonjour $NOM"Commentez votre code pour expliquer pourquoi vous faites quelque chose, pas quoi (le code le montre déjà).
Exemple complet : rapport système
Section intitulée « Exemple complet : rapport système »Voici un script concret qui rassemble des informations sur le système :
#!/bin/bash# rapport-systeme.sh — Affiche un résumé de l'état du système
echo "=== Rapport système ==="echo "Date : $(date)"echo "Machine : $(hostname)"echo "Utilisateur : $USER"echo "Répertoire : $PWD"echo ""echo "Espace disque :"df -h /echo ""echo "Mémoire :"free -hecho "=== Fin du rapport ==="chmod +x rapport-systeme.sh./rapport-systeme.shCe script ne fait qu’enchaîner des commandes que vous connaissez déjà. C’est le principe d’un script : automatiser une séquence de tâches répétitives.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
Permission denied | Script non exécutable | chmod +x mon-script.sh |
command not found en lançant script.sh | ./ manquant devant le nom | Lancer avec ./script.sh |
bad interpreter: No such file | Shebang incorrect ou caractères Windows | Vérifier #!/bin/bash en première ligne, convertir avec dos2unix |
| Variable vide dans le script | Mauvais nom ou $ oublié | Vérifier le nom exact et le $ devant |
[: -z: unexpected operator | Espaces manquants dans le test [ ] | Écrire [ -z "$1" ] avec des espaces |
| Script qui ne s’arrête pas | Boucle implicite ou read en attente | Ctrl+C pour interrompre |
À retenir
Section intitulée « À retenir »- Un script commence par
#!/bin/bash(shebang) qui identifie l’interpréteur. chmod +xrend le fichier exécutable,./script.shle lance.- Les variables (
NOM="valeur") et arguments ($1,$2) rendent un script flexible. readpermet de demander une saisie,echod’afficher un résultat.exit 0signale un succès,exit 1une erreur — testable avececho $?.- Commentez vos scripts pour les rendre compréhensibles.