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 Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:bash-les-differents-caracteres-speciaux [03/07/2014 23:26] captnfab [Shell BASH] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [07/07/2014 16:59] Hypathie [Shell BASH] |
||
---|---|---|---|
Ligne 58: | Ligne 58: | ||
Plus directement, on peut faire : | Plus directement, on peut faire : | ||
<code user>echo $SHELL</code> | <code user>echo $SHELL</code> | ||
- | Qui retournera | ||
<code>/bin/bash</code> | <code>/bin/bash</code> | ||
+ | ;-) | ||
=== Version utilisée === | === Version utilisée === | ||
Ligne 114: | Ligne 114: | ||
==== Notion de processus ==== | ==== Notion de processus ==== | ||
- | Le shell crée un processus pour exécuter une commande externe. Parmi les commandes externes que l'on trouve dans un système, il y a les exécutables ELF (ex. ls, mkdir, vi, sleep) et les fichiers de scripts (dont par exemple les scripts shell). | + | Le shell crée un processus pour exécuter une commande externe. Parmi les commandes externes que l'on trouve dans un système, il y a les exécutables ELF (ex. ls, mkdir, vi, sleep) et les fichiers de scripts (dont par exemple les scripts shell).\\ |
+ | Un petit exemple pour illustrée la notion de processus : [[chantier:script-bash-variables-arguments-parametres?&#exportation-de-la-valeur-d-une-variable|Exportation de la valeur d'une variable]]. | ||
La localisation du code d'une commande externe doit être connu du shell pour qu'il puisse exécuter cette commande. A cette fin, bash utilise la valeur de sa variable prédéfinie PATH. | La localisation du code d'une commande externe doit être connu du shell pour qu'il puisse exécuter cette commande. A cette fin, bash utilise la valeur de sa variable prédéfinie PATH. | ||
Ligne 255: | Ligne 256: | ||
===== Métacaractères et méta-caractères !===== | ===== Métacaractères et méta-caractères !===== | ||
- | ==== Définition courante de métacaractère et détail ==== | + | ==== Définition usuelle de métacaractère et détail ==== |
* Un métacaractère (en anglais, wild card ou joker) est un caractère qui représente un ou plusieurs autres caractères qui eux sont interprétés littéralement. | * Un métacaractère (en anglais, wild card ou joker) est un caractère qui représente un ou plusieurs autres caractères qui eux sont interprétés littéralement. | ||
Ligne 269: | Ligne 270: | ||
| brackets | [ ] (plage de caractères [12] ou union [1-3]) || | | brackets | [ ] (plage de caractères [12] ou union [1-3]) || | ||
- | * D'autre part, man glob et man bash les appellent au contraire caractères génériques.\\ | + | * Attention à la confusion !\\ |
- | En effet, une chaîne de caractères ordinaires est un motif. Et un motif contenant un ou plusieurs "caractères géniriques" est appelé un "motif générique". | + | Man glob et man bash appellent ces caractères, non pas des métacaractères mais caractères génériques(( Et un enchaînement de motifs génériques est nommée par extension, une expression générique. |
- | + | En effet, une chaîne de caractères ordinaires est un motif. Et un motif contenant un ou plusieurs "caractères génériques" est appelé un "motif générique".)).\\ | |
- | Les caractères génériques servent à évoquer un ou plusieurs caractères ; mais aussi l'emplacement d'un et/ou plusieurs caractères. | + | |
- | + | ||
- | Quant au globbing, cela concerne l'opération qui permet d'invoquer par un motif générique, une liste de noms de fichiers pouvant correspondre à ce motifs. | + | |
- | + | ||
- | Un enchaînement de motifs génériques est nommée par extension, //une expression générique//. | + | |
- | + | ||
- | Dans la terminologie de man bash, il s'agit bien des mêmes caractères recouvrant la même fonction. Bref, Un caractère générique est une sous-classe de ce qui y est appelé caractère spécial et renvoie à la fonction de globbing. | + | |
+ | * Quant au globbing, cela concerne l'opération qui permet d'invoquer, par un motif générique, une liste de noms de fichiers pouvant correspondre à ce motifs. | ||
- | <note tip>Pour simplifier, on peut appeler les caractères génériques et expressions génériques, des globs en référence à la commande glob ou à l'option extglob de la commande shopt.\\ | + | <note tip> Pour simplifier, on peut appeler les caractères génériques et expressions génériques, des globs en référence à la commande glob ou à l'option extglob de la commande shopt.\\ |
Voir : man bash ligne 1914,sq. et man glob | Voir : man bash ligne 1914,sq. et man glob | ||
En définitive, dans la suite j'emploierai le terme "métacaractère" comme synonyme de globs simples et bracket. | En définitive, dans la suite j'emploierai le terme "métacaractère" comme synonyme de globs simples et bracket. | ||
+ | |||
</note> | </note> | ||
- | * Enfin, ces expressions génériques sont issues d'un mécanisme plus large et plus complexe appelé, //expressions rationnelles//((ou //expressions régulières//, et en anglais //regular expressions// souvent abrégé en //regex// ou //regexp//)). | + | * Enfin, ces expressions génériques (man bash), ou métacaractères (terminologie usuelle) sont issues d'un mécanisme plus large et plus complexe appelé, //expressions rationnelles//((ou //expressions régulières//, et en anglais //regular expressions// souvent abrégé en //regex// ou //regexp//)). |
* Voir : [[doc:systeme:grep|Regexp et grep]]\\ | * Voir : [[doc:systeme:grep|Regexp et grep]]\\ | ||
Ligne 327: | Ligne 323: | ||
.cache .config | .cache .config | ||
</code> | </code> | ||
- | |||
- | <note warning>FIXME à revoir | ||
**Il y a un piège !** | **Il y a un piège !** | ||
Ligne 352: | Ligne 346: | ||
</code> | </code> | ||
=> liste du répertoire courant : tous les noms de fichiers normaux cachés et le nom de tous les fichiers cachés de type-répertoire (sans leurs contenus cette fois !) | => liste du répertoire courant : tous les noms de fichiers normaux cachés et le nom de tous les fichiers cachés de type-répertoire (sans leurs contenus cette fois !) | ||
- | </note> | + | |
=== Vivre dangereusement supprimer tous les fichiers cachés d'un répertoire ! === | === Vivre dangereusement supprimer tous les fichiers cachés d'un répertoire ! === | ||
Ligne 445: | Ligne 439: | ||
</code> | </code> | ||
- | Un**mot** est quant à lui //une séquence de caractères considérée comme une unité élémentaire par le shell. On parle également de token (jeton)//. | + | Un **mot** est //une séquence de caractères considérée comme une unité élémentaire par le shell. On parle également de token (jeton)//. |
- | Mais pourquoi évoquer les mêmes caractères sous des appellations différentes ? | + | * Attention dans ce sens, le terme de méta-caractère ne renvoie pas aux caractères génériques (man bash) ou au globbing et pattern mais fait référence à l'analyse et au traitement par le shell de la ligne de commande. |
- | + | * L'ordre d'analyse est le suivant : | |
- | Pourquoi trouve-t-on certains caractères dans la définition des méta-caratères ci-dessus, mais aussi dans la liste des opérateurs de contrôle ? S'agit-il de la même chose? | + | |
- | + | ||
- | Cette appellation méta-caractère que l'on trouve dans le man bash, renvoie à l'analyse et au traitement par le shell de la ligne de commande. L'ordre d'analyse est le suivant : | + | |
- découpage lexical en mots ; | - découpage lexical en mots ; | ||
- découpage en commandes (lignes de tubes, instructions de contrôle (if, while...) ) ; | - découpage en commandes (lignes de tubes, instructions de contrôle (if, while...) ) ; | ||
Ligne 462: | Ligne 453: | ||
- récupération de la sortie | - récupération de la sortie | ||
- | Chacun des caractères ci-dessus permet de découper la ligne de commande en mots à l'aide des blancs, non seulement avec "espace" et tabulation", mais aussi avec ces autres séparateurs de mots : | (il ne s'agit pas "encore" du pipe) & ; , < , > | + | <note tip> En bref !!! |
- | + | * Les caractères servant au globbing et au perttern, sont désignés dans le man bash de caractères génériques.\\ Mais à l'usage on parle de métacaractères. | |
- | Ce qu'il faut comprendre, c'est que "espace et "tabulation" permettent de déterminer la commande (premier mot), des (ou de l'option) options (reconnue(s) par - placé avant elle(s), et les arguments. | + | |
- | Les autres signes ci-dessus, désignés de méta-caractères, sont des séparateurs de mots différents de "espace" et "tabulation" parce que, en plus de séparer les mots, ils indiquent le contexte d'exécution des commandes. | + | |
- | Ce qu'il faut comprendre c'est que les méta-caractères, outre "espace" et "tabulation", font partie des caractères spéciaux de bash. Il s'agit avec cette définition d'une première évocation simplifiée indiquant que parmi tous les caractères spéciaux, ces "méta-caractères" se trouvent là présentés seuls | & ; ( ) < > pour indiquer que leurs significations dépendra de l'étape 2 ci-dessus, du contexte des commandes. Ce contexte dépend des commandes puis selon la composition de ces méta-caractères entre eux, et/ou la présence de commandes, de la mise en œuvre des commandes internes, des opérateurs d'enchaînement de commandes, des opérateurs de redirection. | + | * Les caractères qui permettent le mécanisme de lecture d'une ligne de commande par le shell sont appelés dans le man bash méta-caractères.\\ Mais à l'usage on parle de mots réservés. |
- | <note>À l'usage, on regroupe ces "méta-caractères", sous l'appellation de "mots réservés". Il y a deux sortes de mots réservés : les opérateurs de contrôle et les opérateurs de redirection. | + | * On distingue deux sortes de mots réservés : les opérateurs de contrôle et les opérateurs de redirection. |
</note> | </note> | ||
Ligne 487: | Ligne 476: | ||
C'est un " OU " logique qui apparaît dans deux cas :\\ | C'est un " OU " logique qui apparaît dans deux cas :\\ | ||
1) avec ;; dans le contexte de la commande "case" ;\\ | 1) avec ;; dans le contexte de la commande "case" ;\\ | ||
- | <code> | + | <code bash> |
case $variable-name in | case $variable-name in | ||
pattern1|pattern2|pattern3 | pattern1|pattern2|pattern3 | ||
Ligne 502: | Ligne 491: | ||
* Il signifie la aussi " OU "\\ | * Il signifie la aussi " OU "\\ | ||
- | Par exemple : <code>ls ~/Test/!(*jpg|*bmp)</code> | + | Par exemple : <code user>ls ~/Test/!(*jpg|*bmp)</code> |
* Deuxièmement, on retrouve la paire de parenthèses dans le contexte de la commande "function". | * Deuxièmement, on retrouve la paire de parenthèses dans le contexte de la commande "function". | ||
- | <code> | + | <code bash> |
name (){ | name (){ | ||
commands | commands |