logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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:debuter-avec-les-scripts-shell-bash [03/06/2014 13:08]
Hypathie [D )enchaînements de commandes dans les scripts]
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [03/06/2014 14:03]
Hypathie [D ) enchaînements de commandes dans les scripts]
Ligne 428: Ligne 428:
 =====D ) enchaînements de commandes dans les scripts===== =====D ) enchaînements de commandes dans les scripts=====
  
-====1) Code de retour ​ et enchaînement de commande ==== +**Parmi les opérateurs ​d'​enchaînement de commandes (voir : les opérateurs de contrôle)** considérons ​  ​
-Le code de retour (exit status) est fourni par le shell après l'​exécution d'une commande.\\  +
-Le code de retour est un entier positif ou nul. Par convention 0 est l'​état de sortie d'une commande qui s'est exécutée correctement. Tout autre entier indique un problème lors de l'​exécution d'une commande.\\  +
-Il ne faut pas confondre le code de retour et le résultat d'une commande. Le résultat est ce qui s'​inscrit sur la sortie standard.  +
- +
-Il faut connaître ce mécanisme pour pouvoir choisir le ou les caractère(s) d'​enchaînement de commandes adapté(s) au résultat souhaité. +
- +
-**Les caractères ​d'​enchaînement de commandes** (que le trouve souvent sous le nom **d'opérateurs de contrôle**) sont strictement ceux-ci ​+
 <​code>​ <​code>​
-  &    && ​   ( )    { }    ; ​   || +  &    && ​ ;  ​( )    { }  
 </​code>​ </​code>​
  
-===Choisir ​les caractères d'​enchaînement de commandes en fonction de la gestion des flux ===+====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 451: Ligne 444:
 Pourquoi ? Pourquoi ?
  
-  * **L'​opérateur de contrôle "&"​ :** toutes les commandes sont exécutées parallèlement.\\  ​+  * **Avec l'​opérateur de contrôle "&"​ : toutes les commandes sont exécutées parallèlement.**\\  ​
 (Dans l'​exemple ci-dessus, chaque commande étant traitée par un sous-shell, la valeur d'une commande ne peut pas être conservée dans un même processus pour que chaque commande puisse "​travailler en rapport au RESULTAT de la commande précédente. Par exemple, il faut que le fichier créé soit "​connu"​ du shell pour qu'il puise être ouvert par "​gedit"​ dans ce même shell.) (Dans l'​exemple ci-dessus, chaque commande étant traitée par un sous-shell, la valeur d'une commande ne peut pas être conservée dans un même processus pour que chaque commande puisse "​travailler en rapport au RESULTAT de la commande précédente. Par exemple, il faut que le fichier créé soit "​connu"​ du shell pour qu'il puise être ouvert par "​gedit"​ dans ce même shell.)
    
-  * **l'​opérateur ";" ​:** chaque commande est exécuté l'une après l'​autre,​ même si l'une d'elle a mal fonctionné.\\ ​+  * **Avec l'​opérateur ";"​ chaque commande est exécuté l'une après l'​autre,​ même si l'une d'elle a mal fonctionné.**\\ 
    
-  * **L'​opérateur "&&"​ utilise le code de retour :** avec cet opérateur, chaque commande d'une suite est exécuté l'une après l'​autre si le code retour de la première est 0 (c'​est-à-dire si elle a fonctionné).\\ ​ 
- 
-  * **L'​opérateur "​||"​ utilise le code de retour :** la commande suivante est exécutée si le code de retour de la première est différente de zéro, c'​est-à-dire si elle n'a pas fonctionné.\\ Voir plus bas [[atelier:​chantier:​debuter-avec-les-scripts-shell-bash?&#​le-code-de-retour|code de retour]] 
 <​note>​ <​note>​
 Dans l'​exemple avec "​scriptx",​ on a récupéré **la valeur d'une commande** pour s'en servir dans une succession de commandes.\\ ​ Dans l'​exemple avec "​scriptx",​ on a récupéré **la valeur d'une commande** pour s'en servir dans une succession de commandes.\\ ​
Ligne 464: Ligne 454:
 On n'a pas cherché non plus à transmettre le résultat d'une commande à une autre commande (tube |)  On n'a pas cherché non plus à transmettre le résultat d'une commande à une autre commande (tube |) 
 </​note>​ </​note>​
 +
 ====2) Deux syntaxes : { suite-de-commandes ;} ou (suite-de-commandes;​)==== ====2) Deux syntaxes : { suite-de-commandes ;} ou (suite-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 495: Ligne 486:
 </​note>​ </​note>​
  
-**L'​utilisation du groupement de commande sert souvent à la redirection globale de l'​entrée du groupe de commande ou à sa sortie.** On le verra plus loin : [[atelier:​chantier:​debuter-avec-les-scripts-shell-bash?&#​combiner-enchainement-de-commandes-redirection-code-de-retour-dans-un-script]] +**L'​utilisation du groupement de commande sert souvent à la redirection globale de l'​entrée du groupe de commande ou à sa sortie.** On le verra plus loin :  
-  * **(suite-de-commandes;​)**+  * **(suite-de-commandes ;)**
  
 Les parenthèses sont des opérateurs.\\ ​ Les parenthèses sont des opérateurs.\\ ​
-Il n'y a donc pas besoin d'​espace entre la parenthèse ouvrante et la première commande. +Il n'y a donc pas besoin d'​espace entre la parenthèse ouvrante et la première commande.\\ 
-Insérée dans une parenthèse,​ la suite de commandes est exécutée dans un sous-shell.+Insérée dans une parenthèse,​ la suite de commandes est exécutée dans un sous-shell.\\  
 +Les variables comprises dans ces parenthèses,​ à l'​intérieur du sous-shell, ne sont pas visibles par le reste du script. Le **processus parent**, le script, ne peut pas lire les variables créées dans le processus fils, le sous-shell. ​
  
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
-nom=dx +nom=nenette 
-(nom=hypathie ; echo $nom+(prenom=hypathie ; echo $prenom ​
-echo $nom+echo $nom $prenom
 </​code>​ </​code>​
 Retour : Retour :
 <​code>​ <​code>​
-hypathie +nenette
-dx+
 </​code>​ </​code>​
- +Voir : [[http://​abs.traduc.org/​abs-fr/​ch21.html|Guide avancé d'​écriture des scripts Bash: 21. Sous-shells]] 
-=====) État de sortie et les tests=====+=====) État de sortie et les tests=====
 ====1) le code de retour ==== ====1) le code de retour ====
 Il ne faut pas confondre le code de retour et le résultat d'une commande. Le résultat est ce qui s'​inscrit sur la sortie standard. ​ Il ne faut pas confondre le code de retour et le résultat d'une commande. Le résultat est ce qui s'​inscrit sur la sortie standard. ​
Ligne 689: Ligne 680:
 Vous avez tout en mains pour comprendre ceci : [[doc:​programmation:​shell:​avancee#​selecteur-case|Fonctionnalités avancées du Shell: selecteur-case]] Vous avez tout en mains pour comprendre ceci : [[doc:​programmation:​shell:​avancee#​selecteur-case|Fonctionnalités avancées du Shell: selecteur-case]]
  
-=====) Valeurs d'une variable internes ou externes à un script=====+=====) Valeurs d'une variable internes ou externes à un script=====
  
 ====Pré-requis:​ utiliser la structure conditionnelle if==== ====Pré-requis:​ utiliser la structure conditionnelle if====
Ligne 722: Ligne 713:
 **Mais pour modifier la valeur d'une variable par un script (que le script appelle une valeur extérieure**;​ chaîne de caractère donnée par le terminale, récupération du résultat d'une commande, contenu d'un fichier, etc. **ou que cette variable soit affectée dans le script lui-même) on utilise les boucles.** **Mais pour modifier la valeur d'une variable par un script (que le script appelle une valeur extérieure**;​ chaîne de caractère donnée par le terminale, récupération du résultat d'une commande, contenu d'un fichier, etc. **ou que cette variable soit affectée dans le script lui-même) on utilise les boucles.**
  
-=====) Déclaration nulle et modification par le script d'une valeur interne ou externe=====+=====) Déclaration nulle et modification par le script d'une valeur interne ou externe=====
 **Pré-requis : utiliser les structures de contrôle** **Pré-requis : utiliser les structures de contrôle**
 Voir :  Voir : 
Ligne 777: Ligne 768:
 </​code>​ </​code>​
  
-=====) Déclarer des paramètres de position : set=====+=====) Déclarer des paramètres de position : set=====
 ==== syntaxe de set==== ==== syntaxe de set====
 À savoir : variables de substitution prédéfinies [[atelier:​chantier:​bash-les-differents-caracteres-speciaux?&#​variables-de-substitution-predefinies-principalement-dans-les-scripts]] À savoir : variables de substitution prédéfinies [[atelier:​chantier:​bash-les-differents-caracteres-speciaux?&#​variables-de-substitution-predefinies-principalement-dans-les-scripts]]
Ligne 894: Ligne 885:
 </​code>​ </​code>​
  
-=====) Supprimer les paramètres de position=====+=====) Supprimer les paramètres de position=====
 ====Exemple==== ====Exemple====
 **même script que ci-dessus mais on dé-commente set - - (on enlève # ligne 5) :** **même script que ci-dessus mais on dé-commente set - - (on enlève # ligne 5) :**
Ligne 1000: Ligne 991:
 </​note>​ </​note>​
  
-=====) Les fonctions=====+=====) Les fonctions=====
  
  
doc/programmation/shells/debuter-avec-les-scripts-shell-bash.txt · Dernière modification: 20/08/2022 08:35 par paskal

Pied de page des forums

Propulsé par FluxBB