Le scripting offre aux utilisateurs la possibilité de simplifier et de rationaliser leurs opérations quotidiennes. Les scripts Bash (acronyme de Bourne Again Shell) sont des éléments très puissants et utiles pour le développement.
Il s’agit d’un interpréteur de commandes pour les systèmes Unix et Linux. Conçu par Brian Fox en 1989 pour le projet GNU, il a été développé pour remplacer le Bourne Shell original, apportant des améliorations significatives en termes de fonctionnalités et de compatibilité.
L’importance du Bash dans l’administration des systèmes et le développement logiciel ne peut être sous-estimée. Il permet d’automatiser des tâches répétitives, de gérer des systèmes à grande échelle et de faciliter le développement de scripts complexes pour diverses applications.
Les fondamentaux du Bash Scripting
Le Bash scripting est une compétence essentielle pour quiconque travaille avec des systèmes Unix ou Linux.
Bash et Bang : introduction au shebang
Le premier élément clé de tout script Bash est la ligne shebang. Elle indique au système quel interpréteur utiliser pour exécuter le script.
#!/bin/bash
Premier pas : Hello World!
Avec votre éditeur de texte préféré, créez un fichier appelé hello.sh, et ajoutez-y le contenu suivant et enregistrez :
#!/bin/bash
echo "Hello World!"
Rendre un script exécutable
Par défaut, un fichier texte n’a pas les permissions nécessaires pour être exécuté comme un programme. Afin de rendre votre script exécutable, il est nécessaire d’utiliser la commande suivant pour modifier les permissions :
chmod +x hello.sh
Il est ensuite possible de vérifier les permissions avec la commande suivante :
ls -l hello.sh
Exécution d’un script
Afin d’exécuter le script, plusieurs possibilité s’offrent à nous :
- Chemin relatif :
./hello.sh
- Utilisation du shell Bash :
bash hello.sh
- Via le shell sh, mais peut entraîner des comportements différents si le script utilise des fonctionnalités spécifiques à Bash :
sh hello.sh
Commandes de base
Le Bash scripting repose sur l’utilisation efficace d’une variété de commandes pour effectuer des tâches simples et complexes. Voici quelques commande utilisées couramment pour naviguer et manipuler le système de fichier :
- Lister les fichiers et dossiers du répertoire courant
ls
- Changer de répertoire
cd /path/to/directory
- Afficher le dossier courant
pwd
- Créer un fichier vide, ou mettre à jour l’horodatage d’un fichier existant
touch newfile.txt
- Supprimer des fichiers ou dossiers
rm file.txt
Combinaison de commandes
Les scripts Bash deviennent puissants lorsque vous combinez des commandes pour réaliser des tâches plus complexes. Voici quelques exemples :
- Utilisation du “;” pour exécuter plusieurs commandes en une séquence
cd /path/to/directory; ls; pwd
- Redirection de sortie : Utilisez > pour rediriger la sortie d’une commande vers un fichier, ou >> pour ajouter à un fichier existant
echo "Hello, World!" > hello.txt
echo "Hello again!" >> hello.txt
- Utilisation du Pipe ( | ) pour diriger la sortie d’une commande comme entrée d’une autre commande
ls -l | grep ".txt"
Variables et substitution
- Déclaration d’une variable, et utilisation de cette dernière avec $
NAME=”Alice”
echo “Hello, $NAME!”
- Utilisation de la substitution pour utiliser la sortie d’une commande et l’utiliser comme variable
DATE=$(date)
echo "Today's date is $DATE"
Notez que cet exemple est souvent utilisé dans le cadre de création de logs
Gestion des chemins
Comprendre et gérer les chemins de fichiers est essentiel pour naviguer efficacement dans le système de fichiers et écrire des scripts robustes.
Chemin absolu vs relatif
Absolu | Relatif | ||
---|---|---|---|
Spécifie la localisation complète d'un fichier ou d'un répertoire à partir de la racine du système de fichiers. | Indique la localisation d'un fichier ou d'un répertoire par rapport au répertoire courant. | ||
Exemple : /home/user/documents/report.txt | Exemple : documents/report.txt |
Commandes associées
Pour localiser des fichiers et des commandes, plusieurs outils sont disponibles dans Bash :
- Trouver l’emplacement d’un exécutable
which bash
- Emplacement des binaires, sources et documentations associées à une commande
whereis bash
- Recherche de fichiers et dossiers
find /home/user -name "report.txt"
Variables d’environnement
Les variables d’environnement sont des paires clé-valeur qui affectent le comportement des processus du système. Voici les plus courantes :
- $PATH : contient une liste de répertoires où le système recherche les exécutables. Pour le modifier, utilisez la commande suivante
export PATH=$PATH:/new/directory/path
- $HOME : Représente le dossier personnel de l’utilisateur
echo $HOME
cd $HOME
- $PWD : Indique le dossier de travail courant
echo $PWD
- $USER : Contient le nom de l’utilisateur actuel
echo $USER
Contrôle de flux et logique
Le contrôle de flux et la logique sont des éléments essentiels du Bash scripting, permettant d’écrire des scripts dynamiques et adaptables.
Instructions conditionnelles
Elles permettent d’exécuter du code en fonction de certaines conditions. Voici un exemple illustrant l’utilisation de if…elif…else.
#!/bin/bash
echo "Entrez un nombre : "
read number
if [ $number -gt 10 ]; then
echo "Le nombre est plus grand que 10."
elif [ $number -eq 10 ]; then
echo "Le nombre est égal à 10."
else
echo "Le nombre est plus petit que 10."
fi
Boucles
Les boucles sont utilisées pour répéter des commandes plusieurs fois.
- for
for i in 1 2 3 4 5; do
echo "Compteur : $i"
done
- while
count=1
while [ $count -le 5 ]; do
echo "Compteur : $count"
((count++))
done
- until
count=1
until [ $count -gt 5 ]; do
echo "Compteur : $count"
((count++))
done
Quelques scripts utiles et bonnes pratiques
Scripts d’exemple
- Script de backup : copie des fichier d’une source vers une destination
#!/bin/bash
# Ce script effectue une sauvegarde des fichiers
src="/home/user/documents"
dest="/backup/documents"
if [ ! -d $dest ]; then
mkdir -p $dest
fi
for file in $src/*; do
if [ -f $file ]; then
cp $file $dest
echo "Copié $file vers $dest"
fi
done
- Nettoyage : suppression des éléments d’un dossier temporaire
#!/bin/bash
dir="/home/user/temp"
echo "Nettoyage du répertoire $dir"
for file in $dir/*; do
if [ -f $file ]; then
rm $file
echo "Supprimé $file"
fi
done
Quelques bonnes pratiques
1. Commentez : cela rend les scripts plus lisibles et compréhensibles
2. Nommez vos variables de manière descriptive. Évitez les noms de variables telles que $var1, $var2 ou encore $tmpvar.
3. Gérez les erreurs : utilisez des conditions pour vérifier le succès et capturer les erreurs de manière appropriée
4. Modularisez votre code grâce à l’utilisation de fonction, surtout si le script effectue plusieurs opérations, par exemple :
backup_files() {
# Code pour effectuer la sauvegarde
}
5. Déboguez pour identifier les erreurs. Voici les commandes utiles pour cela :
#!/bin/bash
set -x # Active le mode trace, affichant chaque commande et son résultat
# Code du script
#!/bin/bash
set -e # Arrête le script en cas d’erreur
# Code du script
echo "Début du script" # Utilisation de echo à des points stratégiques du scripts pour vérifier les sorties et suivre les flux d’exécution
Pour conclure
Le Bash scripting est un outil puissant pour automatiser et simplifier les tâches sur les systèmes Unix et Linux. En maîtrisant les fondamentaux, les commandes de base, la gestion des chemins, le contrôle de flux et les bonnes pratiques, vous pouvez écrire des scripts robustes et efficaces pour améliorer votre productivité quotidienne.