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:script-bash-enchainement-de-commandes-et-etat-de-sortie [04/06/2014 20:19] Hypathie [enchaînements de commandes dans les scripts] |
doc:programmation:shells:script-bash-enchainement-de-commandes-et-etat-de-sortie [05/06/2014 09:19] Hypathie [script bash : enchaînement de commandes et redirection] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== script bash : enchaînement de commandes; redirection ====== | + | ====== script bash : enchaînement de commandes et redirection ====== |
- | * Objet : du tuto FIXME | + | * Niveau requis : {{tag>débutant}} |
- | * Niveau requis : FIXME {{tag>débutant avisé}} | + | |
- | * Commentaires : //Contexte d'utilisation du sujet du tuto. // 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>en-chantier à-tester à-placer}} - FIXME Pour choisir, voir les autres Tags possibles dans [[:atelier:#tags|l'Atelier]]. | + | * Suivi : {{tag>à-placer}} |
- | * Création par **Hypathie** 03/06/2014 | + | * Création par **Hypathie** 18/03/2014 |
- | * Testé par <...> le <...> FIXME | + | * Testé par <Hypathie> le <Juin 2014> |
- | * Commentaires sur le forum : [[url | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME | + | * Commentaires sur le forum : [[url | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
- | **Nota : wiki n°4** | + | **Nota : wiki n°4**\\ |
+ | **Les autres numéros :** | ||
+ | * wiki n°1 : [[atelier:chantier:debuter-avec-les-scripts-shell-bash]] | ||
+ | * wiki n°2 : [[atelier:chantier:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] | ||
+ | * wiki n°3 : [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|script-bash-detail-sur-les-parametres-et-les-boucles]] | ||
+ | |||
+ | * wiki n°5 : [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] | ||
+ | * wiki n°6 : [[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]] | ||
+ | * wiki n°7 : [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] | ||
Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
- | ===== enchaînements de commandes dans les scripts===== | + | =====Enchaînements de commandes dans les scripts===== |
- | + | Parmi les opérateurs d'enchaînement de commandes (voir [[atelier:chantier:bash-les-differents-caracteres-speciaux#les-operateurs-de-controle|les opérateurs de contrôle]])\\ | |
- | **Parmi les opérateurs d'enchaînement de commandes (voir : les opérateurs de contrôle)** | + | * considérons : |
<code> | <code> | ||
& && ; ( ) { } | & && ; ( ) { } | ||
</code> | </code> | ||
- | **considérons :** | ||
- | ====1) les opérateurs & , && et ;==== | + | Pour les opérateurs de contrôle du point de vue de **l'enchaînement conditionné** (avec && ; || ) voir : [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests?&#etat-de-sortie-et-code-de-retour|état de sortie et code de retour]]. |
+ | |||
+ | ====parallélisme et succession==== | ||
+ | |||
+ | ===1) les opérateurs & , && et ;=== | ||
Reprenons le script "scriptx", et changeons les ";" d'abord par "&", puis par "&&" | Reprenons le script "scriptx", et changeons les ";" d'abord par "&", puis par "&&" | ||
<code bash> | <code bash> | ||
Ligne 46: | Ligne 55: | ||
</note> | </note> | ||
- | ====2) Deux syntaxes : { suite-de-commandes ;} ou (suite-de-commandes;)==== | + | ====Regroupement de commandes==== |
le shell bash fournit deux mécanismes pour regrouper les commandes; l'insertion de la suite de commandes entre accolades et l'insertion de cette suite de commandes entre une paire de parenthèses. | le shell bash fournit deux mécanismes pour regrouper les commandes; l'insertion de la suite de commandes entre accolades et l'insertion de cette suite de commandes entre une paire de parenthèses. | ||
Ligne 99: | Ligne 108: | ||
Voir : [[http://abs.traduc.org/abs-fr/ch21.html|Guide avancé d'écriture des scripts Bash: 21. Sous-shells]] | Voir : [[http://abs.traduc.org/abs-fr/ch21.html|Guide avancé d'écriture des scripts Bash: 21. Sous-shells]] | ||
- | =====Redirections dans les scripts===== | + | =====Redirections et le pipe dans les scripts===== |
- | *Prérequis : [[doc:programmation:shell:shell#rediriger-l-affichage]] et le lien qu'on y trouve [[doc:programmation:shell:chevrons]] | + | * À voir : |
+ | * [[atelier:chantier:bash-les-differents-caracteres-speciaux#les-operateurs-de-redirection|un tableau des opérateurs de redirection]] | ||
====Rappels :==== | ====Rappels :==== | ||
- | Les redirections permettent de travailler non pas en se servant du code de retour (qui indique la réussite ou l'échec de l'exécution d'une commande) mais sur le résultat d'une commande.\\ | + | Les redirections permettent de travailler non pas en se servant du code de retour (qui indique la réussite ou l'échec de l'exécution d'une commande) mais sur les flux.\\ |
Un processus unix possède (par défaut) trois voies d'interaction entre le système et l'utilisateur. Une entrée et deux sorties. Chacun de ces "lieux" sont identifiés par un descripteur de fichier. | Un processus unix possède (par défaut) trois voies d'interaction entre le système et l'utilisateur. Une entrée et deux sorties. Chacun de ces "lieux" sont identifiés par un descripteur de fichier. | ||
-une entrée standard (par défaut le clavier stdin), de descripteur 0 (nom de l'entrée du processus, ne pas confondre avec le code de retour !); | -une entrée standard (par défaut le clavier stdin), de descripteur 0 (nom de l'entrée du processus, ne pas confondre avec le code de retour !); | ||
Ligne 118: | Ligne 127: | ||
le fichier quand il existe et que l'option noclobber (-c) est activée. | le fichier quand il existe et que l'option noclobber (-c) est activée. | ||
</code> | </code> | ||
- | ====1) opérateurs de sortie : ==== | + | ====Opérateurs de sortie et opérateurs d'entrée ==== |
- | <code bash> | + | * Tout est là : [[doc:programmation:shell:chevrons| les chevrons]] \\ |
- | > : crée un fichier ou le réactualise ; redirige le canal choisi vers un fichier et force sa création, | + | |
- | si le fichier existe son contenu est recrée et numéro d'inode du fichier d'origine est conservé. | + | ===Opérateurs de sortie dans un script :=== |
- | </code> | + | |
- | <code bash> | + | |
- | ls -l >chemin-fichier.txt | + | |
- | </code> | + | |
- | est un équivalent de : | + | |
- | <code bash> | + | |
- | ls -l 1> chemin-fichier.txt | + | |
- | </code> | + | |
- | ===Dans un script :=== | + | |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 157: | Ligne 158: | ||
Amateurs de magie blanche et noire voir ce fil : [[http://debian-facile.org/viewtopic.php?pid=86634#p86634]] | Amateurs de magie blanche et noire voir ce fil : [[http://debian-facile.org/viewtopic.php?pid=86634#p86634]] | ||
</note> | </note> | ||
- | *redirection de commande vers un fichier, si le fichier existe, les données sont ajoutées à la suite du fichier. | + | |
+ | ===Opérateurs d'entrée dans les scripts=== | ||
<code bash> | <code bash> | ||
- | >> | + | < Place, en entrée d'une commande, un contenu. |
+ | </code> | ||
+ | <code bash> | ||
+ | cat < /chemin/du/fichier.txt # est un équivalent de cat /chemin/du/fichier.txt | ||
</code> | </code> | ||
+ | <code bash> | ||
+ | << Redirige en entrée une série de données. | ||
+ | </code> | ||
+ | On nomme cette redirection "label".\\ Redirection utilisée dans un document en ligne dont on se sert que pour certaines commandes, comme ftp ou cat.\\ Voir : [[http://abs.traduc.org/abs-5.0-fr/ch18.html#heredocref]]\\ | ||
+ | Ne pas confondre avec la commande e2label, voir : [[doc:systeme:e2label]] | ||
+ | |||
+ | ===Usages de la sortie d'erreur dans les scripts=== | ||
- | *La sortie standard d'erreur peut être dirigée vers un fichier en le créant ou en l'écrasant : | + | * La sortie standard d'erreur peut être dirigée vers un fichier en le créant ou en l'écrasant : |
<code bash> | <code bash> | ||
ls vi 2>err # retour du prompt : le message d'erreur a été inscrit | ls vi 2>err # retour du prompt : le message d'erreur a été inscrit | ||
Ligne 216: | Ligne 229: | ||
c'est-à-dire le fichier "erreur". | c'est-à-dire le fichier "erreur". | ||
</code> | </code> | ||
- | ====2)Opérateurs d'entrée : ==== | ||
- | <code bash> | ||
- | < Place, en entrée d'une commande, un contenu. | ||
- | </code> | ||
- | <code bash> | ||
- | cat < /chemin/du/fichier.txt # est un équivalent de cat /chemin/du/fichier.txt | ||
- | </code> | ||
- | <code bash> | ||
- | << Redirige en entrée une série de données. | ||
- | </code> | ||
- | On nomme cette redirection "label".\\ Redirection utilisée dans un document en ligne dont on se sert que pour certaines commandes, comme ftp ou cat.\\ Voir : [[http://abs.traduc.org/abs-5.0-fr/ch18.html#heredocref]]\\ | ||
- | Ne pas confondre avec la commande e2label, voir : [[doc:systeme:e2label]] | ||
- | ====3) Un petit exercice sur opérateurs ==== | + | |
+ | ====Un petit exercice sur opérateurs ==== | ||
Écrire un script qui crée le dossier "ABCD" et 4 fichiers vides (nommés a b c d) ; | Écrire un script qui crée le dossier "ABCD" et 4 fichiers vides (nommés a b c d) ; | ||
qui liste le contenu de "ABCD" et qui inscrit le résultat dans un fichier nommé "ls1" qui sera placé dans "ABCD" ; | qui liste le contenu de "ABCD" et qui inscrit le résultat dans un fichier nommé "ls1" qui sera placé dans "ABCD" ; | ||
Ligne 283: | Ligne 285: | ||
* **$?** : permet ici de vérifier que la commande précédente s'est déroulée avec succès quand "**;**" a été utilisé, inutile de vérifier avec **&&**. | * **$?** : permet ici de vérifier que la commande précédente s'est déroulée avec succès quand "**;**" a été utilisé, inutile de vérifier avec **&&**. | ||
+ | ====Le pipe ==== | ||
+ | |||
+ | Tout est là : [[doc:programmation:shell:pipe|le pipe]] | ||