Problèmes fréquemment posés
Bash est le shell standard sur pratiquement chaque système Linux et son scripting est une compétence essentielle pour toute personne qui gère des serveurs. Cet article explique ce qu'est Bash, comment utiliser l'historique et l'expansion, et comment écrire un premier script shell fonctionnel. Destiné aux administrateurs système et aux développeurs qui travaillent avec Linux.
Prérequis
- Un système Linux avec Bash version 4.0 ou supérieure (vérifiez avec `bash --version`)
- Un accès à un terminal et à un éditeur de texte comme `nano`, `vim` ou `gedit`
- Des connaissances de base des commandes Linux comme `ls`, `cd` et `cat`
Étapes
1. Vérifiez la version de Bash
Exécutez la commande suivante pour voir quelle version de Bash votre système utilise :bash --version
La sortie affiche la version, par exemple `GNU bash, version 5.2.21(1)-release`. Travaillez avec au moins la version 4.0, car les versions plus anciennes n'ont pas certaines fonctionnalités comme les tableaux associatifs.
2. Consultez l'historique des commandes
Bash enregistre les commandes saisies précédemment dans le fichier caché `.bash_history` dans votre répertoire personnel. Affichez la liste avec :history
Cela renvoie des lignes numérotées, par exemple `123 ls -la`. L'historique est activé par défaut et enregistre les commandes par session.
3. Utilisez l'expansion de l'historique
Avec des points d'exclamation, vous réexécutez des commandes précédentes sans les retaper. Les trois formes les plus utilisées :!! # répète la dernière commande
!123 # exécute la commande de la ligne 123
!grep # exécute la dernière commande commençant par 'grep'Cette expansion fonctionne uniquement dans les shells interactifs, pas dans les scripts. Elle fait gagner du temps pour les commandes longues ou complexes que vous utilisez souvent.
4. Créez un premier script shell
Un script shell est un fichier texte contenant des commandes Bash. Créez un nouveau fichier :nano hallo.sh
Collez le contenu suivant dans le fichier :
#!/bin/bash
echo "Bonjour de Pixzo"
mkdir -p /tmp/pixzo-test
echo "Le dossier /tmp/pixzo-test a été créé"La première ligne (`shebang`) indique au système que Bash doit exécuter le script. Les lignes suivantes exécutent des commandes. Enregistrez le fichier avec `Ctrl+O` et fermez avec `Ctrl+X`.
5. Rendez le script exécutable
Sans droits d'exécution, le script ne démarre pas directement. Accordez ces droits avec :chmod +x hallo.sh
Cela ajoute le bit d'exécution au fichier. Vérifiez les droits avec `ls -l hallo.sh` — la sortie affiche `-rwxr-xr-x`.
6. Exécutez le script
Lancez le script de deux manières. Directement :./hallo.sh
Ou en appelant explicitement Bash :
bash hallo.sh
Les deux méthodes donnent la même sortie. La différence : avec `./hallo.sh`, le système utilise l'interpréteur de la ligne shebang ; avec `bash hallo.sh`, il ignore cette ligne et utilise le Bash que vous appelez.
7. Combinez des commandes avec des pipes et la redirection
Bash vous permet de chaîner des commandes. Un pipe (`|`) envoie la sortie d'une commande à la suivante. La redirection (`>`, `<`) envoie la sortie vers un fichier ou lit l'entrée depuis un fichier. Un exemple pratique :ps aux | grep httpd > /tmp/httpd-processen.txt
Cette commande affiche tous les processus (`ps aux`), filtre les lignes contenant `httpd` (`grep httpd`) et écrit le résultat dans un fichier. Consultez le résultat avec :
cat /tmp/httpd-processen.txt
8. Ajoutez de la logique avec des variables et des conditions
Un script ne devient utile qu'avec des variables et une logique conditionnelle. Étendez `hallo.sh` :#!/bin/bash
DIR="/tmp/pixzo-test"
if [ -d "$DIR" ]; then
echo "$DIR existe déjà"
else
mkdir -p "$DIR"
echo "$DIR créé"
fiLa variable `DIR` stocke le chemin. L'instruction `if` vérifie si le dossier existe et gère les deux cas. Enregistrez, rendez exécutable avec `chmod +x hallo.sh` et exécutez :
./hallo.sh
Vérification
Vérifiez que tout fonctionne :./hallo.sh && ls -la /tmp/pixzo-test
Si le script s'exécute correctement, vous voyez le message indiquant que le dossier existe ou a été créé, et `ls -la` affiche le contenu du dossier. Le code de sortie du script se vérifie avec :
echo $?
Un `0` signifie que le script s'est terminé sans erreur.
Problèmes fréquents
Le script ne démarre pas avec `./hallo.sh` et affiche `Permission denied` Le bit d'exécution manque. Exécutez `chmod +x hallo.sh`.`!123` ne fonctionne pas dans le terminal L'expansion de l'historique est désactivée ou la ligne n'existe pas. Vérifiez avec `history` quels numéros sont disponibles. Activez l'expansion avec `set -H`.
Le script affiche `bad interpreter: /bin/bash^M` Le fichier contient des fins de ligne Windows (`\r\n`). Convertissez-le avec `sed -i 's/\r$//' hallo.sh` ou enregistrez le fichier avec des fins de ligne Unix dans votre éditeur.
Bash reste le standard dans les distributions Linux, répond aux spécifications POSIX et constitue la base de l'automatisation dans les scripts d'init, les pipelines CI/CD et l'administration système. La syntaxe est parfois stricte, mais une fois que l'on maîtrise la combinaison des pipes, des variables et des conditions, on construit des workflows qu'aucun outil graphique n'égale — et la question n'est pas de savoir si vous avez besoin de Bash, mais quand vous allez l'utiliser.