Quand vous tapez ls *.txt, le shell remplace *.txt par la liste des
fichiers correspondants avant de lancer ls. C'est une expansion : le shell
transforme ce que vous écrivez en quelque chose de plus précis. Comprendre ces
mécanismes permet d'écrire des commandes courtes et puissantes au lieu de
répéter les mêmes opérations à la main.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Utiliser les jokers (
*,?,[...]) pour cibler des fichiers - Générer des séquences avec les accolades
{a,b}et{1..5} - Utiliser le tilde
~comme raccourci vers le répertoire personnel - Injecter le résultat d'une commande avec
$() - Faire un calcul simple avec
$(()) - Choisir entre guillemets simples et doubles
Globbing : les jokers
Section intitulée « Globbing : les jokers »Le globbing (expansion de motifs) est le mécanisme le plus utilisé. Le shell remplace les motifs par la liste des fichiers qui correspondent.
L'étoile *, zéro ou plusieurs caractères
Section intitulée « L'étoile *, zéro ou plusieurs caractères »ls *.txtAffiche tous les fichiers qui se terminent par .txt dans le répertoire
courant.
ls rapport*Affiche tous les fichiers dont le nom commence par rapport.
Le point d'interrogation ?, exactement un caractère
Section intitulée « Le point d'interrogation ?, exactement un caractère »ls fichier?.txtCorrespond à fichier1.txt, fichierA.txt, mais pas à fichier12.txt (deux
caractères après fichier).
Les crochets [...], un caractère parmi une liste
Section intitulée « Les crochets [...], un caractère parmi une liste »ls fichier[123].txtCorrespond à fichier1.txt, fichier2.txt, fichier3.txt.
Vous pouvez aussi utiliser un intervalle :
ls fichier[a-z].txtCorrespond à fichiera.txt, fichierb.txt, etc.
Combiner les jokers
Section intitulée « Combiner les jokers »ls /var/log/*.logls /etc/*.d/ls *.{txt,md}Tester sans risque
Section intitulée « Tester sans risque »Pour voir ce que le shell va étendre, utilisez echo au lieu de la commande
réelle :
echo *.txtLe shell affiche la liste des fichiers correspondants sans rien exécuter.
Accolades : générer des séquences
Section intitulée « Accolades : générer des séquences »Les accolades {} permettent de générer une liste de valeurs. Contrairement au
globbing, les accolades ne dépendent pas des fichiers existants.
Liste explicite
Section intitulée « Liste explicite »La forme la plus simple énumère les valeurs entre accolades, séparées par des virgules et sans espace. Le shell produit alors autant d'arguments qu'il y a d'éléments, et cette expansion a lieu avant l'exécution de la commande.
echo {rouge,vert,bleu}rouge vert bleuUtile pour créer plusieurs dossiers d'un coup :
mkdir -p projet/{src,docs,tests}Crée trois sous-dossiers dans projet/.
Séquence numérique
Section intitulée « Séquence numérique »Les deux points entre deux nombres engendrent l'intervalle complet, bornes comprises. C'est la forme qui sert à créer des fichiers ou des répertoires numérotés en une seule commande, sans écrire de boucle.
echo {1..5}1 2 3 4 5touch fichier{01..10}.txtCrée fichier01.txt à fichier10.txt.
Séquence alphabétique
Section intitulée « Séquence alphabétique »Le même mécanisme fonctionne sur les lettres, dans l'ordre alphabétique. L'intérêt est identique : engendrer une série de noms qui n'existent pas encore, ce que le globbing ne sait pas faire puisqu'il part des fichiers présents.
echo {a..f}a b c d e fTilde : raccourci vers home
Section intitulée « Tilde : raccourci vers home »Le caractère ~ est remplacé par le chemin de votre répertoire personnel :
echo ~/home/bob~/Documents équivaut à /home/bob/Documents.
Le tilde accepte aussi un nom de compte accolé : ~alice désigne le
répertoire personnel d'Alice, soit /home/alice, à condition que le compte
existe sur la machine. Dans le cas contraire, le shell laisse la chaîne
telle quelle, ce qui produit un chemin littéral ~alice et une erreur de
fichier introuvable.
Substitution de commande : $()
Section intitulée « Substitution de commande : $() »La syntaxe $(commande) exécute la commande entre parenthèses et remplace le
tout par sa sortie :
echo "Nous sommes le $(date +%d/%m/%Y)"Nous sommes le 06/04/2026Autre exemple, stocker le résultat dans une variable :
NB_FICHIERS=$(ls | wc -l)echo "Il y a $NB_FICHIERS fichiers ici"La substitution de commande est très utile dans les scripts pour capturer dynamiquement des informations.
Arithmétique : $(())
Section intitulée « Arithmétique : $(()) »Bash sait calculer sans appeler de programme externe, à une condition : il ne
manipule que des entiers. Une division rend donc un quotient entier,
$((7 / 2)) valant 3 et non 3,5, et il n'existe pas de nombre à virgule.
Pour un calcul décimal, il faut passer par un outil comme bc ou awk.
Pour faire un calcul entier :
echo $((3 + 7))10Opérateurs disponibles : +, -, *, / (division entière), % (modulo).
TOTAL=$((512 * 1024))echo "$TOTAL octets"Guillemets : simples vs doubles
Section intitulée « Guillemets : simples vs doubles »Le choix des guillemets détermine si le shell interprète ou non les variables et les expansions.
Guillemets doubles "...", le shell interprète
Section intitulée « Guillemets doubles "...", le shell interprète »NOM="Alice"echo "Bonjour $NOM"Bonjour AliceLes expansions $NOM, $(commande) et $((calcul)) sont interprétées.
Guillemets simples '...', le shell n'interprète rien
Section intitulée « Guillemets simples '...', le shell n'interprète rien »Les guillemets simples désactivent toute expansion : variables,
substitutions de commande et calculs sont transmis tels quels. Ce sont donc
eux qu'il faut employer pour un texte littéral, une expression régulière, ou
un mot de passe contenant un $.
echo 'Bonjour $NOM'Bonjour $NOMLe texte est pris littéralement.
Quand utiliser lequel ?
Section intitulée « Quand utiliser lequel ? »| Situation | Guillemets |
|---|---|
| Texte avec variables à remplacer | "..." |
| Texte littéral sans remplacement | '...' |
| Commande avec espaces dans un chemin | "..." |
Une habitude à prendre dès maintenant : entourez systématiquement vos variables
de guillemets doubles, sous la forme "$MA_VAR". Sans eux, un espace
présent dans la valeur est lu comme un séparateur d'arguments, et une
commande qui devait recevoir un nom de fichier en reçoit deux. Le défaut
ne se voit qu'avec des valeurs qui contiennent un espace, donc jamais pendant
les tests.
Dépannage
Section intitulée « Dépannage »Ces 5 symptômes ont une racine commune : l'expansion a lieu dans le
shell, avant que la commande ne s'exécute. Le message d'erreur vient donc de
la commande, qui a reçu autre chose que ce que vous pensiez lui donner, et ne
parle jamais de l'expansion elle-même. En cas de doute, remplacez la commande
par echo pour voir ce qu'elle aurait reçu.
| Symptôme | Cause probable | Solution |
|---|---|---|
ls *.txt affiche « No matches found » | Aucun fichier .txt dans le répertoire | Vérifier avec ls puis ajuster le motif |
mkdir {a,b,c} crée un seul dossier {a,b,c} | Espace après la virgule ou guillemets simples autour | Écrire {a,b,c} sans espaces et sans '...' |
$NOM affiche le texte littéral | Variable entourée de guillemets simples '...' | Utiliser des guillemets doubles "..." |
$(commande) ne fonctionne pas | Parenthèses incorrectes ou commande inexistante | Vérifier la commande seule d'abord |
| Calcul retourne 0 au lieu du résultat | Division entière ou syntaxe $() au lieu de $(()) | Utiliser $(( )) avec doubles parenthèses |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- Le globbing (
*,?,[...]) fait correspondre des noms de fichiers existants. - Les accolades
{a,b}et{1..5}génèrent des listes, indépendamment des fichiers. ~est le raccourci vers votre répertoire personnel.$(commande)injecte le résultat d'une commande dans une autre.$(())permet les calculs entiers.- Les guillemets doubles
"..."interprètent les variables, les simples'...'non.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Écrire un premier script : Shebang, variables, arguments et codes de sortie.