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 [09/07/2014 08:12] Hypathie [Bash : Vision d'ensemble] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [11/07/2014 10:33] Hypathie [Métacaractères et métacaractères !] |
||
---|---|---|---|
Ligne 25: | Ligne 25: | ||
**Dans ce tuto** : | **Dans ce tuto** : | ||
* définitions de //shell bash// et liens internes spécifiques au sujets évoqués ; | * définitions de //shell bash// et liens internes spécifiques au sujets évoqués ; | ||
- | * explication sur l’ambiguïté du terme méta-caractère. | + | * explication sur l’ambiguïté du terme métacaractère. |
* définitions de termes associés au shell et liens internes spécifiques au sujets évoqués | * définitions de termes associés au shell et liens internes spécifiques au sujets évoqués | ||
Ligne 90: | Ligne 90: | ||
Une commande interne est une commande dont le code est implémenté au sein même du shell. | Une commande interne est une commande dont le code est implémenté au sein même du shell. | ||
- | Les commandes sont intégrées, soit pour des raisons de performances (l'appel d'une telle commande ne crée pas de processus fils du shell courant); soit parce qu'une commande intégrée se sert des variables internes du shell. | + | Les commandes sont intégrées, soit pour des raisons de performances (l'appel d'une telle commande ne crée pas de processus fils(([[doc:systeme:processus|processus]])) du shell courant); soit parce qu'une commande intégrée se sert des variables internes du shell. |
Cela signifie que lorsqu'on change de shell courant (par exemple bash, dash, zsh ou C-shell((Voir : http://fr.wikipedia.org/wiki/Csh)), on ne dispose plus des mêmes commandes internes. | Cela signifie que lorsqu'on change de shell courant (par exemple bash, dash, zsh ou C-shell((Voir : http://fr.wikipedia.org/wiki/Csh)), on ne dispose plus des mêmes commandes internes. | ||
Ligne 136: | Ligne 136: | ||
<code user>type sleep</code> | <code user>type sleep</code> | ||
<code>sleep est /bin/sleep</code> | <code>sleep est /bin/sleep</code> | ||
- | //''/bin/commande'' signifie donc que c'est une commande externe.// | + | >''/bin/commande'' signifie donc que c'est une commande externe. |
<code user>type ls</code> | <code user>type ls</code> | ||
Ligne 146: | Ligne 146: | ||
<code user>which ls</code> | <code user>which ls</code> | ||
<code>/bin/ls</code> | <code>/bin/ls</code> | ||
- | //''ls'' est donc l'alias de la commande externe ''/bin/ls''// | + | >''ls'' est donc l'alias de la commande externe ''/bin/ls'' |
</note> | </note> | ||
Ligne 290: | Ligne 290: | ||
Attention, cette commande est dangereuse !\\ | Attention, cette commande est dangereuse !\\ | ||
Elle efface tout le contenu du dossier.\\ | Elle efface tout le contenu du dossier.\\ | ||
- | À ne pas lancer dans votre dossier personnel sous peine perdre de manière irrémédiable de tous vos fichiers ! | + | À ne pas lancer dans votre dossier personnel sous peine perdre irrémédiablement tous vos fichiers ! |
</note> | </note> | ||
<code user>ls</code> | <code user>ls</code> | ||
Ligne 320: | Ligne 320: | ||
* **À voir** : [[http://abs.traduc.org/abs-5.0-fr/ch11.html|Guide avancé d'écriture des scripts Bash: 11. Substitution de commandes]] | * **À voir** : [[http://abs.traduc.org/abs-5.0-fr/ch11.html|Guide avancé d'écriture des scripts Bash: 11. Substitution de commandes]] | ||
- | ===== Métacaractères et méta-caractères !===== | + | ===== Métacaractères et "métacaractères" !===== |
==== Définition usuelle 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. | ||
- | Certains caractères spéciaux sont appelés //méta-caractères// ; soit parce qu'ils servent à effectuer des recherches sur les mots ; soient parce qu'ils servent dans les expressions rationnelles; soit encore parce qu'ils représentent symboliquement quelque chose, un fichier, la valeur d'une variable ; finalement parce que ces caractères représentes symboliquement quelque chose; | + | Certains caractères spéciaux sont appelés //métacaractères// ; soit parce qu'ils servent à effectuer des recherches sur les mots ; soient parce qu'ils servent dans les expressions rationnelles; soit encore parce qu'ils représentent symboliquement quelque chose, un fichier, la valeur d'une variable ; finalement parce que ces caractères représentes symboliquement quelque chose; |
- | * D'une part, le wiki [[:doc:programmation:shell:les-metacaracteres|"les métacaractères, ou globs, ou encore patterns"]] présente les méta-caractères ''?'', '';'', ''*'' et les crochets ''[ ]'' qui sont communs aux différents shell. | + | * D'une part, le wiki [[:doc:programmation:shell:les-metacaracteres|"les métacaractères, ou globs, ou encore patterns"]] présente les métacaractères ''?'', '';'', ''*'' et les crochets ''[ ]'' qui sont communs aux différents shell. |
- | Voici un tableau qui regroupe les méta-caractères : | + | Voici un tableau qui regroupe les métacaractères : |
^ Communs à différents shell ^^^ | ^ Communs à différents shell ^^^ | ||
Ligne 337: | Ligne 337: | ||
* D'autre part, man glob et man bash dénomme //caractères génériques//(( Et un enchaînement de motifs génériques est nommée par extension, une expression générique. | * D'autre part, man glob et man bash dénomme //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".)), ce que nous appellons des métacaractères .\\ Attention à la confusion ! Voir plus bas [[atelier:chantier:bash-les-differents-caracteres-speciaux#definition-particuliere|définition particulière de man bash]]. | + | 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".)), ce que nous appelons des métacaractères .\\ Attention à la confusion ! Voir plus bas [[atelier:chantier:bash-les-differents-caracteres-speciaux#definition-particuliere|définition particulière de man bash]]. |
* 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. | * 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. | ||
Ligne 344: | Ligne 344: | ||
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> | ||
Ligne 431: | Ligne 431: | ||
mkdir Hide-files && cd Hide-files && touch ./.fichier1 ./.fichier2 ./fichier1 ./fichier2 | mkdir Hide-files && cd Hide-files && touch ./.fichier1 ./.fichier2 ./fichier1 ./fichier2 | ||
</code> | </code> | ||
- | | + | |
* Pour visualiser ce qu'on fait : | * Pour visualiser ce qu'on fait : | ||
Ligne 507: | Ligne 507: | ||
</note> | </note> | ||
- | ==== Méta-caractères, ou opérateurs de contrôle et de redirection ==== | + | ==== "Métacaractères", ou opérateurs de contrôle et de redirection ==== |
===Définition particulière === | ===Définition particulière === | ||
<code text man bash> | <code text man bash> | ||
- | méta-caractère | + | métacaractère |
Un caractère qui, non protégé, sépare les mots. Un de ceux-ci : | Un caractère qui, non protégé, sépare les mots. Un de ceux-ci : | ||
Ligne 522: | Ligne 522: | ||
>On parle également de //token// (jeton). | >On parle également de //token// (jeton). | ||
- | * 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. | + | * Attention dans ce sens, le terme de "métacaractè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 : | * L'ordre d'analyse est le suivant : | ||
- découpage lexical en mots ; | - découpage lexical en mots ; | ||
Ligne 535: | Ligne 535: | ||
<note tip> En bref !!! | <note tip> En bref !!! | ||
- | * Les caractères servant __au globbing et au patterns__, sont désignés dans le man bash de caractères génériques.\\ Mais à l'usage on parle de __métacaractères__. | + | * Les caractères servant __au globbing et au patterns__, sont désignés dans le man bash de //caractères génériques//.\\ Mais à l'usage on parle de __métacaractères__. |
- | * 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__. | + | * 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étacaractères//.\\ Mais à l'usage on parle __de mots réservés__. |
* On distingue 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. | ||
Ligne 543: | Ligne 543: | ||
==== Les opérateurs de contrôle ==== | ==== Les opérateurs de contrôle ==== | ||
- | + | ||
- | <code> | + | ===Parmi tous les opérateurs de contrôle ci-dessous :=== |
+ | <code text man bash> | ||
|| && ; & ;; ( ) | <retour-chariot> | || && ; & ;; ( ) | <retour-chariot> | ||
</code> | </code> | ||
+ | |||
+ | ===Il faut premièrement distinguer ceux qui servent à enchaîner les commandes :=== | ||
+ | |||
+ | '' || && ; <retour-chariot> '' | ||
+ | |||
+ | Voir : | ||
+ | * [[doc:programmation:shell:shell|Le shell pour tous]] | ||
+ | * [[doc:programmation:shell:shell#enchainer-plusieurs-commandes]] | ||
+ | * [[atelier:chantier:script-bash-enchainement-de-commandes-et-etat-de-sortie#enchainements-de-commandes-dans-les-scripts|Enchaînements de commandes dans les scripts]] | ||
+ | * [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests?&#l-enchainement-conditionnel-est-fonde-sur-le-code-de-retour|l'enchaînement conditionnel]] | ||
+ | |||
+ | ===Remarques === | ||
<note tip> | <note tip> | ||
- | Premièrement, à strictement parler, parmi les caractères de la liste ci-dessus, ceux qui servent à enchaîner les commandes sont : | + | Quant aux autres : '' & ;; ( ) | '' |
- | <code> || && ; <retour-chariot> </code> | + | * Le signe ''|'' est un "ou" logique. |
- | > Le signe ''|'' est un "ou" logique. | ||
> Il ne fait pas référence ici au pipe qui sert dans les tubes. | > Il ne fait pas référence ici au pipe qui sert dans les tubes. | ||
- | > Ce "ou" logique qui apparaît dans deux cas : | + | > Ce "ou" logique apparaît dans deux cas : |
- | + | ||
- | * Avec '';;'' dans le contexte de la commande ''case'' | + | * le ''|'' dans le contexte d'utilisation des globs étendus et des expressions rationnelles\\ voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#les-globs-etendus]]\\ Par exemple : <code user>ls ~/Test/!(*jpg|*bmp)</code> |
- | <code bash> | + | * Le ''|'' avec les '';;'' dans contexte de la commande ''case'' |
- | case $variable-name in | + | <code> |
- | pattern1|pattern2|pattern3 | + | case chaîne in |
- | # ^ ^ | + | choix1 ) commande ;; |
- | # ou ou | + | choix2 | choix3 ...) commande ;; |
- | command1 | + | # ^ |
- | ... | + | ... |
- | commandN | + | * ) commande ... ;; |
- | *) | + | |
esac | esac | ||
- | </code> | + | </code> |
- | * Dans le contexte d'utilisation des globs étendus et des expressions rationnelles\\ voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#les-globs-etendus]]\\ Par exemple : <code user>ls ~/Test/!(*jpg|*bmp)</code> | + | * On retrouve la paire de parenthèses simples ''( )'': |
- | + | * Avec la commande ''function'' | |
- | Deuxièmement, on retrouve la paire de parenthèses simples ''( )'': | + | |
- | + | ||
- | > Avec la commande ''function'' | + | |
<code bash> | <code bash> | ||
Ligne 583: | Ligne 591: | ||
</code> | </code> | ||
- | > Avec les substitutions de commande ''$( )'' | + | * Avec les substitutions de commande ''$( )'' |
- | + | * Avec les globs étendus (voir lien ci-dessus) ;\\ | |
- | > Avec les globs étendus (voir lien ci-dessus) ;\\ | + | |
ou dans les expressions rationnelle (voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#liste-des-caracteres-utilises-dans-les-expressions-regulieres-de-type-bashiste]]\\ | ou dans les expressions rationnelle (voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#liste-des-caracteres-utilises-dans-les-expressions-regulieres-de-type-bashiste]]\\ | ||
- | > Ne pas confondre avec la double paire de parenthèse ''<nowiki>(( ))</nowiki>'' qui ne figure pas\\ dans la liste et qui sert à faire des calculs\\ (voir : [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques]]. | + | > Et à pas confondre avec la double paire de parenthèse ''<nowiki>(( ))</nowiki>'' qui ne figure pas\\ dans la liste et qui sert à faire des calculs\\ (voir : [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques]]. |
</note> | </note> | ||
- | À voir : [[doc:programmation:shell:shell#enchainer-plusieurs-commandes]] | + | |
==== Les opérateurs de redirection ==== | ==== Les opérateurs de redirection ==== | ||
Ligne 616: | Ligne 624: | ||
<note> | <note> | ||
- | Enfin, ne sont pas désignés de méta-caractères :\\ | + | Enfin, ne sont pas désignés de "métacaractères", ni d'opérateurs de contrôle :\\ |
Tous les caractères spéciaux, c'est-à-dire les symboles auxquels le shell est sensible.\\ | Tous les caractères spéciaux, c'est-à-dire les symboles auxquels le shell est sensible.\\ | ||
Comme nous le verrons dans cette série de wiki, il s'agit : | Comme nous le verrons dans cette série de wiki, il s'agit : |