Introduction
Lorsque vous écrivez des scripts, vous devez souvent modifier du texte stocké dans des variables. Vous pouvez avoir besoin d’extraire une partie précise d’un chemin de fichier, de remplacer un mot dans un paramètre de configuration ou de garantir qu’une variable possède une valeur valide, même si l’utilisateur n’en a pas fourni.
Bash fournit pour cela des outils intégrés puissants appelés expansion des paramètres.
Il s’agit d’un concept important du shell, car il permet de transformer du texte sans lancer de commandes supplémentaires. Dans les scripts shell, les fonctions intégrées sont souvent plus rapides et plus simples que l’appel d’utilitaires externes pour chaque petite modification.
Dans ce laboratoire, vous apprendrez trois techniques essentielles de manipulation des chaînes de caractères :
- Extraction : extraire une partie précise d’une chaîne, par exemple ses 5 premiers caractères.
- Remplacement : rechercher et remplacer du texte dans une chaîne.
- Valeurs par défaut : affecter automatiquement une valeur de secours lorsqu’une variable est absente ou vide.
Définir une variable contenant une chaîne
Commencez par créer une variable contenant un chemin de fichier long. Vous utiliserez cette chaîne pour vous exercer aux techniques de manipulation.
La gestion des chaînes intervient partout dans le travail avec le shell, car de nombreuses informations système sont représentées sous forme de texte : chemins, noms d’utilisateur, noms d’hôte, valeurs de configuration et sortie des commandes. Apprendre à modifier du texte sans quitter le shell permet de gagner beaucoup en productivité.
Créez un nouveau script nommé string_lab.sh.
Ouvrez string_lab.sh et ajoutez le code suivant :
nano string_lab.sh
#!/bin/bash
## Define a variable with a file path
FILE_PATH="/usr/local/share/applications/config.xml"
echo "Original Path: $FILE_PATH"
Enregistrez le fichier (Ctrl+O, Enter), puis quittez (Ctrl+X).
Rendez le script exécutable et lancez-le pour préparer l’environnement :
chmod +x string_lab.sh
./string_lab.sh
Le chemin complet doit s’afficher. Vous pouvez maintenant commencer à manipuler cette chaîne.
Extraire une sous-chaîne (extraction)
Vous pouvez parfois avoir besoin d’une partie précise d’une chaîne, comme ses premiers caractères. Cette opération s’appelle l’extraction.
La syntaxe d’extraction est la suivante : ${Variable:Offset:Length}
- Offset : position de départ (
0correspond au premier caractère). - Length : nombre de caractères à extraire.
Cette opération utilise l’expansion des paramètres : Bash transforme directement la valeur de la variable avant d’exécuter la commande. Aucun utilitaire supplémentaire, comme cut, n’est nécessaire pour une simple extraction de sous-chaîne.
Vous allez extraire les 5 premiers caractères (/usr/) de FILE_PATH.
Ouvrez string_lab.sh :
nano string_lab.sh
Ajoutez le code suivant à la fin du fichier :
## Slicing: Start at index 0, take 5 characters
## Syntax: ${Variable : Start : Length}
SLICE=${FILE_PATH:0:5}
echo "First 5 characters: $SLICE"
Enregistrez le fichier et quittez l’éditeur. Exécutez ensuite le script :
./string_lab.sh
Résultat :
First 5 characters: /usr/
Bash a extrait exactement 5 caractères en commençant au début de la chaîne.
Remplacer une sous-chaîne
Cette technique fonctionne comme l’opération « Rechercher et remplacer » d’un éditeur de texte.
La syntaxe est la suivante : ${Variable/Find/Replace}.
Supposons que vous vouliez remplacer le dossier share par bin dans le chemin du fichier.
Ouvrez string_lab.sh :
nano string_lab.sh
Ajoutez ce code :
## Replacement: Find 'share', replace with 'bin'
## Syntax: ${Variable / Pattern / Replacement}
NEW_PATH=${FILE_PATH/share/bin}
echo "Modified Path: $NEW_PATH"
Enregistrez le fichier et quittez l’éditeur. Exécutez ensuite le script :
./string_lab.sh
Résultat :
Modified Path: /usr/local/bin/applications/config.xml
Le shell a trouvé la première occurrence de share et l’a remplacée par bin.
Cette technique est souvent utile pour manipuler des chemins, nettoyer des noms de fichiers et modifier rapidement une configuration. Comme l’opération s’effectue directement dans Bash, elle est généralement plus légère et plus lisible que le lancement d’une commande distincte de traitement de texte pour un petit remplacement.
Fournir une valeur par défaut
Les scripts dépendent souvent de données d’entrée ou de variables d’environnement, comme USER ou HOME. Si ces variables sont absentes, votre script peut s’arrêter ou avoir un comportement imprévisible.
Vous pouvez fournir une valeur par défaut à utiliser lorsque la variable n’est pas définie ou qu’elle est vide.
La syntaxe est la suivante : ${Variable:-DefaultValue}.
Ouvrez string_lab.sh :
nano string_lab.sh
Ajoutez ce code. Notez que USER_NAME n’a pas été définie dans notre script et qu’elle est donc actuellement absente.
## Default Value: If USER_NAME is missing, use 'guest'
## Syntax: ${Variable :- Default}
CURRENT_USER=${USER_NAME:-guest}
echo "Current User: $CURRENT_USER"
Enregistrez le fichier et quittez l’éditeur. Exécutez ensuite le script :
./string_lab.sh
Résultat :
Current User: guest
Comme USER_NAME n’était pas définie, Bash a utilisé la valeur de secours guest pour remplacer la donnée manquante. Le script peut ainsi continuer à s’exécuter normalement.
Ce modèle est particulièrement utile dans l’automatisation, lorsque les données d’entrée peuvent provenir de variables d’environnement ou d’arguments facultatifs. Une valeur par défaut pertinente rend un script plus sûr et plus prévisible lorsque certaines données sont absentes.
Résumé
Dans ce laboratoire, vous avez appris à manipuler directement des chaînes de caractères dans Bash à l’aide de l’expansion des paramètres :
- Extraction (
${var:offset:length}) : extraire des sous-chaînes avec précision. - Remplacement (
${var/old/new}) : modifier le contenu d’une variable. - Valeurs par défaut (
${var:-default}) : gérer correctement les variables absentes.
Ces techniques vous permettent d’écrire des scripts robustes capables de traiter efficacement du texte, sans recourir à des outils externes comme sed ou awk pour les tâches simples.



