Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres [08/07/2014 19:01] Hypathie [Caractères et syntaxe de transformation de paramètres] |
doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres [01/10/2023 11:37] (Version actuelle) captnfab |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
* Objet : suite de la série de wiki visant à maîtriser bash via les différents caractère spéciaux. | * Objet : suite de la série de wiki visant à maîtriser bash via les différents caractère spéciaux. | ||
* Niveau requis : {{tag>débutant avisé}} | * Niveau requis : {{tag>débutant avisé}} | ||
+ | * Commentaires : FIXME | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : {{tag>à-placer}} | + | * Suivi : |
- | * Création par [[user>Hypathie]] 08/04/2014 | + | * Création par [[user>Hypathie]] le 08/04/2014 |
- | * Testé par Hypathie en Avril 2014 | + | * Testé par [[user>Hypathie]] en Avril 2014 |
- | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=87499#p87499 | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | + | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=140921#p140921 | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
+ | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
- | * [[atelier:chantier:bash-les-differents-caracteres-speciaux|Vision d'ensemble]] | ||
- | * [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]] | ||
- | * [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]] | ||
- | * [[atelier:chantier:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Les opérateurs de comparaison numérique]] | ||
- | * [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Les symboles dans les calculs]] | ||
- | * [[atelier:chantier:page-man-bash-v-les-tableaux|Les tableaux]] | ||
- | * [[atelier:chantier:bash-vii-globs-etendus-regex|Globs étendus et regex]] | ||
+ | * [[doc:programmation:shells:bash-les-differents-caracteres-speciaux|Vision d'ensemble]] | ||
+ | * [[doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]] | ||
+ | * [[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]] | ||
+ | * [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Les opérateurs de comparaison numérique]] | ||
+ | * [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Les symboles dans les calculs]] | ||
+ | * [[doc:programmation:shells:page-man-bash-v-les-tableaux|Les tableaux]] | ||
+ | * ;-) | ||
+ | * [[doc:programmation:shells:bash-vii-globs-etendus-regex|Bash : Variables, globs étendus, ERb, ERe]] | ||
+ | **Nota : Dans cette page l'expression "caractère générique" est employée dans le sens de métacaractère, glob ou pattern(([[doc:programmation:shells:bash-les-differents-caracteres-speciaux#definition-usuelle-de-metacaractere-et-detail]])).** | ||
=====Caractères et syntaxe de transformation de paramètres===== | =====Caractères et syntaxe de transformation de paramètres===== | ||
On peut substituer des variables ou paramètres définis(es) précédemment par l'utilisateur dans un script, et cela permet d'en transformer le contenu. Cela permet aussi de donner une valeur à une variable déclarée mais nulle. | On peut substituer des variables ou paramètres définis(es) précédemment par l'utilisateur dans un script, et cela permet d'en transformer le contenu. Cela permet aussi de donner une valeur à une variable déclarée mais nulle. | ||
- | <nowiki> | ||
- | |||
- | |||
- | </nowiki> | ||
^Syntaxe de substitution ^Significations ^ | ^Syntaxe de substitution ^Significations ^ | ||
Ligne 43: | Ligne 43: | ||
<note tip> | <note tip> | ||
Certaines substitutions de paramètre recoupent les fonctionnalités de la commande expr.\\ | Certaines substitutions de paramètre recoupent les fonctionnalités de la commande expr.\\ | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 58: | Ligne 58: | ||
</note> | </note> | ||
===Substitution de paramètres par référence indirecte=== | ===Substitution de paramètres par référence indirecte=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 72: | Ligne 72: | ||
===Substitution par modification=== | ===Substitution par modification=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 84: | Ligne 84: | ||
===Substitution d'un paramètre non-déclaré ou de valeur nulle=== | ===Substitution d'un paramètre non-déclaré ou de valeur nulle=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 98: | Ligne 98: | ||
===Attribution d'une valeur par défaut=== | ===Attribution d'une valeur par défaut=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
echo ${nom_utilasateur=`whoami`} # attribution d'une valeur par défaut, rien n'a été déclaré | echo ${nom_utilasateur=`whoami`} # attribution d'une valeur par défaut, rien n'a été déclaré | ||
Ligne 108: | Ligne 108: | ||
moi | moi | ||
</code> | </code> | ||
- | * **ou encore :** | + | * Ou encore : |
<note tip> | <note tip> | ||
Attention : l'indice du premier caractère d'une chaîne de caractères est 0. | Attention : l'indice du premier caractère d'une chaîne de caractères est 0. | ||
</note> | </note> | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
echo "J'aime les chats" | echo "J'aime les chats" | ||
Ligne 126: | Ligne 126: | ||
===Extraction de sous-chaîne contenu dans la valeur de la variable ${paramètre:début:longueur}=== | ===Extraction de sous-chaîne contenu dans la valeur de la variable ${paramètre:début:longueur}=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 158: | Ligne 158: | ||
===Substitution de la valeur d'une variable (ou d'un paramètre) par la longueur de sa chaîne ${#paramètre}=== | ===Substitution de la valeur d'une variable (ou d'un paramètre) par la longueur de sa chaîne ${#paramètre}=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 172: | Ligne 172: | ||
===Suppression de la plus courte chaîne ${paramètre#modèle}=== | ===Suppression de la plus courte chaîne ${paramètre#modèle}=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 184: | Ligne 184: | ||
===Suppression de la plus longue chaîne $paramètre##modèle}=== | ===Suppression de la plus longue chaîne $paramètre##modèle}=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 196: | Ligne 196: | ||
===Modifier un paramètre en supprimant ses derniers caractères=== | ===Modifier un paramètre en supprimant ses derniers caractères=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 206: | Ligne 206: | ||
</code> | </code> | ||
- | * ou encore : | + | * Ou encore : |
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 221: | Ligne 221: | ||
Toutes les occurrences du motif sont remplacées par la chaîne. | Toutes les occurrences du motif sont remplacées par la chaîne. | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 250: | Ligne 250: | ||
* Quand il s'agit de ne changer que la première occurrence, on peut choisir de changer la première ou la dernière : | * Quand il s'agit de ne changer que la première occurrence, on peut choisir de changer la première ou la dernière : | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 275: | Ligne 275: | ||
* Par exemple : | * Par exemple : | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 298: | Ligne 298: | ||
s/motif/chaîne | s/motif/chaîne | ||
</code> | </code> | ||
- | Cette confusion vient souvent de la ressemblance de la syntaxe <code>var/.../... ou var//.../...</code> de la substitution de paramètres du shell bash, avec celle des expressions rationnelles mentionnées ci-dessus.\\ | + | |
- | Elle est renforcée aussi par la ressemblance des globs * ? [ - ] de bash certains caractères que l'on retrouve dans les expressions rationnelles.\\ | + | Cette confusion vient souvent de la ressemblance de la syntaxe ''<nowiki>var/.../...</nowiki>'' ou ''<nowiki>var//.../...</nowiki>'' que l'on utilise pour la substitution de paramètres, avec celle des expressions rationnelles (voir la note ci-dessous).\\ |
+ | |||
+ | Elle est renforcée aussi par la ressemblance des globs '' * '', '' ? '', ''<nowiki>[ - ]</nowiki>'' ainsi que par certains caractères utilisés avec les expressions rationnelles .\\ | ||
<note tip> | <note tip> | ||
- | Attention donc, s'il est possible d'utiliser " * " " ? " et "[ - ]" dans les modifications de chaînes d'un paramètre que nous venons de voir, il n'est pas possible d'utiliser les expressions rationnelles directement.\\ | + | Attention donc, s'il est possible d'utiliser '' * '' , '' ? '' et ''<nowiki>[ - ]</nowiki>'' dans les modifications de chaînes d'un paramètre que nous venons de voir, il n'est pas possible d'utiliser les expressions rationnelles directement.\\ |
Avec le shell Bash on utilise les //expressions rationnelles// au moyen de commandes externes qui elles les utilisent, comme grep, sed, awk, vi (par exemple : set -o vi).\\ | Avec le shell Bash on utilise les //expressions rationnelles// au moyen de commandes externes qui elles les utilisent, comme grep, sed, awk, vi (par exemple : set -o vi).\\ | ||
- | Voir : [[atelier:chantier:bash-les-differents-caracteres-speciaux?&#l-operateur-de-correspondance-d-une-expression-rationnelle-dans-une-expression-de-tests]]. | + | Voir : [[doc:programmation:shells:bash-vii-globs-etendus-regex?#correspondance-de-motifs-avec-les-expressions-rationnelles]]. |
On n'utilise pas de //ER// pour ce qui concerne les substitutions de paramètres abordés ici, mais il est possible d'utiliser les caractères génériques basiques (pattern ou glob), ainsi que "les génériques de class" <nowiki>[[:class:]]</nowiki> au moyen de sa commande interne "shopt", munie de l'option extglob. | On n'utilise pas de //ER// pour ce qui concerne les substitutions de paramètres abordés ici, mais il est possible d'utiliser les caractères génériques basiques (pattern ou glob), ainsi que "les génériques de class" <nowiki>[[:class:]]</nowiki> au moyen de sa commande interne "shopt", munie de l'option extglob. | ||
Ligne 311: | Ligne 313: | ||
==== Utilisation du caractère génériques " ? ". ==== | ==== Utilisation du caractère génériques " ? ". ==== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
var=debian123456facile | var=debian123456facile | ||
Ligne 328: | Ligne 330: | ||
.................. | .................. | ||
</code> | </code> | ||
- | ====4) Utilisation du caractère générique " * ". === | + | ==== Utilisation du caractère générique "*". === |
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 363: | Ligne 365: | ||
====Utilisation des brackets [ - ] ==== | ====Utilisation des brackets [ - ] ==== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
v=debian123456facile | v=debian123456facile | ||
Ligne 393: | Ligne 395: | ||
====Modifier la case : caractères {...^...}, {...^^...}, {...,...}, {...,,...}==== | ====Modifier la case : caractères {...^...}, {...^^...}, {...,...}, {...,,...}==== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
var="je vais apprendre à utiliser le shell." | var="je vais apprendre à utiliser le shell." | ||
Ligne 415: | Ligne 417: | ||
</code> | </code> | ||
- | ====commande shopt -s extglob et braquet de classe [ [:class:] ]=== | + | ====commande shopt -s extglob et braquet de classe <nowiki>[ [:class:] ]</nowiki>=== |
<code>([[:lower:]])</code> | <code>([[:lower:]])</code> | ||
Elle désigne une suite de caractères minuscules : on peut retirer la première occurrence, ou toutes les occurrences à des caractères. | Elle désigne une suite de caractères minuscules : on peut retirer la première occurrence, ou toutes les occurrences à des caractères. | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
shopt -s extglob | shopt -s extglob | ||
Ligne 442: | Ligne 444: | ||
<code>([[:digit:]])</code> | <code>([[:digit:]])</code> | ||
Exemples | Exemples | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
shopt -s extglob | shopt -s extglob | ||
Ligne 461: | Ligne 463: | ||
</code> | </code> | ||
====Négation de caractères [^...] et [!...] ; extraction de symboles [.SYMBOL.]==== | ====Négation de caractères [^...] et [!...] ; extraction de symboles [.SYMBOL.]==== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
shopt -s extglob | shopt -s extglob | ||
Ligne 491: | Ligne 493: | ||
<note tip> | <note tip> | ||
- | * Remarque sur la syntaxe : | + | Donc : |
- | <code> | + | * Remarque sur les syntaxes : ''<nowiki> $var/.../... </nowiki>'' et ''<nowiki> $var//.../... </nowiki>''. |
- | $var/.../... | + | |
- | ou | + | |
- | $var//.../... | + | |
- | </code> | + | |
* Attention de ne pas confondre les globs étendus et les expressions régulières | * Attention de ne pas confondre les globs étendus et les expressions régulières | ||
Avec shopt -s extglob : | Avec shopt -s extglob : | ||
- | - On peut utiliser les globs simples ( * ? [ ] ) et les globs étendus [ | ? @ ! + ^] | + | - On peut utiliser les globs simples ( ''*'' , ''?'' , ''<nowiki>[ ]</nowiki>'' ) et les globs étendus : ''<nowiki>[ ]</nowiki>'', ''<nowiki>|</nowiki>'', ''?'', ''@'', ''!'', ''+'', '' ^ '' |
- | - MAIS on ne peut pas utiliser les EXPRESSIONS RÉGULIÈRES (où les globs étendus sont "ré-utilisés" avec une syntaxe différente, à côté d'autres caractères : la distinction entre globs étendus et ER est développée [[atelier:chantier:bash-vii-globs-etendus-regex|ici]] ).\\ | + | |
+ | - Mais on ne peut pas utiliser les expressions régulières (où les globs étendus sont "ré-utilisés" avec une syntaxe différente, à côté d'autres caractères : la distinction entre globs étendus et //ER// est développée [[doc:programmation:shells:bash-vii-globs-etendus-regex|ici]] ).\\ | ||
À voir aussi : http://wiki.bash-hackers.org/syntax/pattern\\ | À voir aussi : http://wiki.bash-hackers.org/syntax/pattern\\ | ||
* Pour les classes de caractères, attention à la norme POSIX : [[http://hyperpolyglot.org/shell]] : | * Pour les classes de caractères, attention à la norme POSIX : [[http://hyperpolyglot.org/shell]] : | ||
- | NON POXIS : <code>[[:nom-classe:]]</code> | + | Non POXIS : ''<nowiki>[[:nom-classe:]]</nowiki>''\\ |
- | POSIX : | + | |
- | <code> | + | POSIX : ''<nowiki>[:upper:]</nowiki>'' ; ''<nowiki>[:alnum:]</nowiki>'', etc. |
- | [:upper:] # majuscules | + | |
- | [:alnum:] # alphanumériques | + | |
- | </code> | + | |
Une liste plus complète ici : [[doc:programmation:shell:regexp#les-ensembles-de-caracteres-possibles]]\\ | Une liste plus complète ici : [[doc:programmation:shell:regexp#les-ensembles-de-caracteres-possibles]]\\ | ||
+ | Voir le wiki suivant : [[doc:programmation:shells:bash-vii-globs-etendus-regex|globs étendus et expressions régulières]] | ||
* Pour les autres options de la commande interne shopt : | * Pour les autres options de la commande interne shopt : | ||
Ligne 517: | Ligne 516: | ||
=====tuto précédent : ===== | =====tuto précédent : ===== | ||
- | [[atelier:chantier:page-man-bash-v-les-tableaux|Bash : les tableaux]] | + | [[doc:programmation:shells:page-man-bash-v-les-tableaux|Bash : les tableaux]] |
=====tuto suivant : ===== | =====tuto suivant : ===== | ||
- | [[atelier:chantier:bash-vii-globs-etendus-regex|Bash : globs étendus et regex]] | + | [[doc:programmation:shells:bash-vii-globs-etendus-regex|Bash : globs étendus et regex]] |