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:script-bash-etat-de-sorie-et-les-tests [07/06/2014 06:52]
Hypathie [script bash : état de sorie et les tests]
doc:programmation:shells:script-bash-etat-de-sorie-et-les-tests [19/10/2015 18:27]
milou [Script bash : état de sortie et les tests]
Ligne 1: Ligne 1:
-====== ​script ​bash : état de sorie et les tests ======+====== ​Script ​bash : état de sortie ​et les tests ======
  
-  * Niveau requis : {{tag>​débutant}}+  ​* Objet : Script bash : enchaînement de commandes et redirection 
 +  ​* 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 **Hypathie** 18/​03/​2014 +    * Création par [[user>Hypathie]] le 18/​03/​2014 
-    * Testé par <Hypathiele <Juin 2014> +    * Testé par [[user>Hypathie]] le Juin 2014 
-  * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​pid=92203#p92203 ​| Lien vers le forum concernant ce tuto]] ((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=142600#p142600 ​| 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°5** 
-**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]] ​ 
-  * wiki n°4 : [[atelier:​chantier:​script-bash-enchainement-de-commandes-et-etat-de-sortie|script-bash-enchainement-de-commandes-et-etat-de-sortie]] 
-  ​ 
-  * 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 !
 +
 +------
 +
 +**Nota : Les autres wiki :**
 +  * [[doc:​programmation:​shells:​debuter-avec-les-scripts-shell-bash]]
 +  * [[doc:​programmation:​shells:​script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]]
 +  * [[doc:​programmation:​shells:​script-bash-detail-sur-les-parametres-et-les-boucles|modification de variable et de paramètre]] ​
 +  * [[doc:​programmation:​shells:​script-bash-enchainement-de-commandes-et-etat-de-sortie|script-bash-enchainement-de-commandes-et-etat-de-sortie]]
 +  * ;-)
 +  * [[doc:​programmation:​bash:​script:​tableaux|script-bash-les-tableaux]]
 +  * [[doc:​programmation:​bash:​script:​fonction|script-bash-les-fonctions]]
 +
 +
  
 ===== État de sortie et code de retour===== ===== État de sortie et code de retour=====
Ligne 24: Ligne 30:
 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. ​
   - L'​exécution de tous programmes et de toutes fonctions renvoie une valeur numérique appelée code de retour.   - L'​exécution de tous programmes et de toutes fonctions renvoie une valeur numérique appelée code de retour.
-  - Il est envoyé 0 si tout c'est bien passé lors de l'​exécution,​ et un nombre entre 1 et 255 s'il y a eu une erreur. +  - Il est envoyé ​''​0'' ​si tout c'est bien passé lors de l'​exécution,​ et un nombre entre ''​1 et 255'' ​s'il y a eu une erreur. 
-  - Pour récupérer le code de retour on utilise le paramètre spécial $?+  - Pour récupérer le code de retour on utilise le paramètre spécial ​''​$?''​.
   - Il y a des codes de retour particuliers,​ par exemple :   - Il y a des codes de retour particuliers,​ par exemple :
  
Ligne 31: Ligne 37:
 blabla blabla
 </​code> ​ </​code> ​
-puis+
 <code user> <code user>
 echo $? echo $?
 </​code>​ </​code>​
-Retour : +<file config retour de la commande>
-<code>+
 127 127
-</code+</file
-//On peut chercher dans les codes d'​erreur de bash que 127 est le code de retour pour les commandes qui n'ont pas pu être trouvées. + 
-//+>On peut chercher dans les codes d'​erreur de bash que ''​127'' ​est le code de retour pour les commandes qui n'ont pas pu être trouvées. 
  
 L'​état de sortie vrai ou faux ( 0 ou autre chose) est utilisé avec : L'​état de sortie vrai ou faux ( 0 ou autre chose) est utilisé avec :
  
   - enchaînements conditionnels ​ :  ​   - enchaînements conditionnels ​ :  ​
-  - les tests ( commande test, double crochets, if/else, case)+  - les tests ( commande ​''​test''​''<​nowiki>​[[ ]]</​nowiki>''​''​if/else''​''​case''​)
  
 ==== L'​enchaînement conditionnel est fondé sur le code de retour==== ==== L'​enchaînement conditionnel est fondé sur le code de retour====
-**Parmi les opérateurs d'​enchaînement de commandes ​** +Parmi les opérateurs d'​enchaînement de commandes ​ci-dessous :​\\  ​ 
-(voir : [[atelier:chantier:​bash-les-differents-caracteres-speciaux#​les-operateurs-de-controle|les opérateurs de contrôle]])+(voir : [[doc:programmation:​shells:​bash-les-differents-caracteres-speciaux#​Les opérateurs ​de contrôle|les opérateurs de contrôle]])
 <​code>​ <​code>​
   ||    && ​   ;    <​retour-chariot>  ​   ||    && ​   ;    <​retour-chariot>  ​
 </​code>​ </​code>​
-**est basé utilise ​le code de retour :**+ceux fonctionnant sur le code de retour, sont :
  
-  - L'​opérateur ​**"&&"​** ​: 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 ​''​et'',​ ''​cmd1 ​&& ​cmd2'' ​: avec cet opérateur, ​la commande ​2 est exécutée si le code retour de la commande 1 est ''​0''​ (c'est-à-dire, si elle a fonctionné). 
 +  - l'opérateur ​''​ou'',​ ''​cmd1 || cmd2''​ : la commande 2 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'pas fonctionné. ​ 
  
-  ​- L'​opérateur **||** : 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é.  ​+  * Exemple ​
  
-Exemple : soit le dossier "​Mon-dossier"​ non-vide; le dossier "​mon-dossier"​ vide; et le dossier "​mondossier"​ inexistant.+Soit le dossier "​Mon-dossier"​ non-vide; le dossier "​mon-dossier"​ vide; et le dossier "​mondossier"​ inexistant.
  
 <code bash> <code bash>
Ligne 72: Ligne 79:
  ( [ $reponse == oui ] && echo " le dossier va être créé"​ ) #; && mkdir ~/​mondossier ​  ( [ $reponse == oui ] && echo " le dossier va être créé"​ ) #; && mkdir ~/​mondossier ​
 </​code>​ </​code>​
-(Les antislash ne sont pas obligatoires,​ ils servent à rendre plus lisible les longues commandes qui se suivent sur une ligne.\\ +>Les antislash ne sont pas obligatoires,​ ils servent à rendre plus lisible les longues commandes qui se suivent sur une ligne. 
-On inhibe là le <​retour-chariot>​ !)+>On inhibe là le ''​<​retour-chariot>​'' ​! 
 <​note>​ <​note>​
-Les opérateurs && et || s'​utilisent comme les opérateurs binaires.\\ +Les opérateurs ​''​&&'' ​et ''​||'' ​s'​utilisent comme les opérateurs binaires.\\ 
-Avec eux eux, c'est soit 0 soit autre chose que 0.\\ +Avec eux eux, c'est soit ''​0'' ​soit autre chose que ''​0'',​ c'​est-à-dire ''​1'',​ ou encore soit vrai, soit faux.\\ 
-Voir la liste des [[atelier:chantier:​page-man-bash-iv-symboles-dans-les-calculs-mathematiques#​operateurs-binaires|opérateurs binaires]]+Voir la liste des [[doc:​programmation:shells:​page-man-bash-iv-symboles-dans-les-calculs-mathematiques#​operateurs-binaires|opérateurs binaires]]
 </​note>​ </​note>​
  
-====3) Inverser le code de retour de la sortie d'une commande====+====Inverser le code de retour de la sortie d'une commande====
 <​code>​ <​code>​
 ! commande ! commande
 </​code>​ </​code>​
  
-Exemple.+  * Exemple ​:
 <code user> <code user>
 whoami whoami
 </​code>​ </​code>​
-puis +
 <code user> <code user>
 echo $?  ​ echo $?  ​
 </​code>​ </​code>​
-retour ​0+<file config ​retour ​de la commande>​ 
 + 0 
 +</​file>​
  
 <code user> <code user>
 ! whoami ! whoami
 </​code>​ </​code>​
-puis +
 <code user> <code user>
 echo $?  ​ echo $?  ​
 </​code>​ </​code>​
-retour ​1+<file config ​retour ​de la commande>​ 
 +1 
 +</​file>​
  
 ==== Utiliser la commande exit ==== ==== Utiliser la commande exit ====
  
-  * Syntaxe : +  * Syntaxe : ''​exit  ​nombre'​'
-  ​exit + nombre (nombre de 1 à 3 chiffre(s).) +
-   +
-==="​exit"​ permet de remplacer le code de retour de la dernière commande d'un script.===+
  
-**exemples**+>Avec un nombre de 1 à 3 chiffre(s). 
 + 
 +===La commande "​exit"​ === 
 +''​exit''​ permet de remplacer le code de retour de la dernière commande d'un script. 
 +  ​Exemples :
 Dans ce script, puisque la correspondance est juste, la commande "exit 1" est exécutée, et on sort du programme. Dans ce script, puisque la correspondance est juste, la commande "exit 1" est exécutée, et on sort du programme.
 <code bash> <code bash>
Ligne 122: Ligne 135:
 </​code>​ </​code>​
  
-retour 
 <​code>​ <​code>​
 bonjour est correspond à bonjour bonjour est correspond à bonjour
 </​code>​ </​code>​
  
-puis (dans le même terminal) :+<code user> 
 +./​mon-script 
 +</​code>​
 <code user> <code user>
 echo $? echo $?
 </​code>​ </​code>​
-retour ​1+<file config ​retour ​de la commande>​ 
 +1 
 +</​file>​
  
 ==="​exit"​ force à sortir du programme=== ==="​exit"​ force à sortir du programme===
Ligne 149: Ligne 165:
 echo "​$var"​ echo "​$var"​
 </​code>​ </​code>​
-retour :+
 <​code>​ <​code>​
 bonjour ne correspond pas à coucou bonjour ne correspond pas à coucou
 + 0
 </​code>​ </​code>​
  
Ligne 166: Ligne 182:
 exit 0 exit 0
 </​code>​ </​code>​
-retour : 
  
 <​code>​ <​code>​
Ligne 173: Ligne 188:
  
 ===Convention et sortie de programme par défaut=== ===Convention et sortie de programme par défaut===
-**Par convention on finit un script par exit 0**\\+>Par convention on finit un script par ''​exit 0''​ 
 +
 +>Si on ne finit pas par ''​exit 0'',​ il s'​exécute un ''​exit $?''​ par défaut, ce qui est équivalent à un ''​exit''​ (tout court). ​
  
-**Si on ne finit pas par exit 0, il s'​exécute un exit $?, ce qui est équivalent à un exit (tout court)** 
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Ligne 184: Ligne 200:
 exit 13 exit 13
 </​code>​ </​code>​
- 
-retour : 
  
 <​code>​ <​code>​
Ligne 191: Ligne 205:
 127 127
 </​code>​ </​code>​
 +  * Ou encore :
 <code user> <code user>
 echo $? echo $?
 </​code>​ </​code>​
-retour ​13+<file config ​retour ​de la commande>​ 
 +13 
 +</​file>​
 ===== État de sortie et les tests===== ===== État de sortie et les tests=====
 ===À savoir :===  ===À savoir :=== 
  
-  * [[atelier:chantier:​la-page-man-bash-ii-les-operateurs-lexicographiques|les opérateurs lexicographiques]] et leur syntaxe +  * [[doc:programmation:​shells:​la-page-man-bash-ii-les-operateurs-lexicographiques|les opérateurs lexicographiques]] et leur syntaxe 
-  * [[atelier:chantier:​page-man-bash-iii-les-operateurs-de-comparaison-numerique|les opérateurs de comparaison numérique et leur syntaxe]] +  * [[doc:programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique|les opérateurs de comparaison numérique et leur syntaxe]] 
-  * La commande test ou les crochets :[[atelier:chantier:​page-man-bash-iii-les-operateurs-de-comparaison-numerique#​conclusion-sur-les-operateurs-lexicographiques-et-les-operateurs-de-comparaison-numerique]]+  * La commande test ou les crochets :[[doc:​programmation:shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique#​conclusion-sur-les-operateurs-lexicographiques-et-les-operateurs-de-comparaison-numerique]]
  
 <note tip> <note tip>
- ​**Attention au signe =** + ​**Attention au signe ''​=''​** 
-Ne pas confondre le signe = de l'​affectation d'une variable par une valeur (voir ci-dessus [[atelier:chantier:​debuter-avec-les-scripts-shell-bash#​affectation-directe|affectation directe]])\\ avec l'​opérateur de correspondance = (ou ==  ) utilisé dans les tests.\\  +Ne pas confondre le signe ''​='' ​de l'​affectation d'une variable par une valeur (voir ci-dessus [[doc:programmation:​shells:​debuter-avec-les-scripts-shell-bash#​affectation-directe|affectation directe]])\\ avec l'​opérateur de correspondance ​''​='' ​(ou ''​=='' ​ ) utilisé dans les tests.\\  
-Dans les tests sur les entiers l'​égalité est représentée par l'​option -eq !+Dans les tests sur les entiers l'​égalité est représentée par l'​option ​''​-eq'' ​!
 </​note>​ </​note>​
  
Ligne 213: Ligne 229:
 De même que la composition de commandes vu plus haut, on se sert de la composition avec les tests. Et oui les doubles crochets et la commande test sont des commandes ! LOL De même que la composition de commandes vu plus haut, on se sert de la composition avec les tests. Et oui les doubles crochets et la commande test sont des commandes ! LOL
  
-  * séquentielle : cmd1 ; cmd2 +  * séquentielle : ''​cmd1 ; cmd2''​ 
-  * parallèle : cmd1 & cmd2 + 
-  * sur erreur (ou) : cmd1 || cmd2 +  * parallèle : ''​cmd1 & cmd2''​ 
-  * sur succès (et) : cmd1 && cmd2+ 
 +  * sur erreur (ou) : ''​cmd1 || cmd2''​ 
 + 
 +  * sur succès (et) : ''​cmd1 && cmd2''​
  
   * rappel des options des commandes de test :   * rappel des options des commandes de test :
-  - -z $chaine : teste si la variable ne contient rien +  - ''​-z $chaine'' ​: teste si la variable ne contient rien 
-  - -n $chaine : teste si la variable contient quelque-chose+ 
 +  - ''​-n $chaine'' ​: teste si la variable contient quelque-chose
  
 <code bash> <code bash>
Ligne 253: Ligne 273:
 ===Alternatives : case et paramètres passés aux scripts=== ===Alternatives : case et paramètres passés aux scripts===
 <note tip> <note tip>
-Attention case n'​utilise pas d'​expression régulière,​ il s'agit plutôt de "​pattern matching"​+Attention, ''​case'' ​n'​utilise pas d'​expression régulière,​ il s'agit plutôt de "​pattern matching"​.\\ 
 +Voir : [[http://​bash.leyan.org/​Cours+5+-+bash+II#​Structure_conditionnelle_i_case_i_| les symboles reconnus par cases sont ceux servant à la manipulation des fichiers]].
 </​note>​ </​note>​
   * syntaxe de case :   * syntaxe de case :
Ligne 264: Ligne 285:
 esac    ​ esac    ​
 </​code>​ </​code>​
-  * explications ​:+  * Explications ​:
   - case "​teste"​ la valeur du paramètre passé au script avec chaque "​expression"​ ;   - case "​teste"​ la valeur du paramètre passé au script avec chaque "​expression"​ ;
-  - et en fonction du test il y a exécution ou pas des commandes placées au niveau de "​instructions"​ ;+  - et en fonction ​de la réussite ou de l'​échec ​du testil y a exécution ou non des commandes placées au niveau de "​instructions"​ ;
   - Case sert à conditionner l'​exécution des commandes en fonction d'​argument choisi ;   - Case sert à conditionner l'​exécution des commandes en fonction d'​argument choisi ;
   - On se sert de "​l'​étoile"​ pour permettre que soit exécuter quelque chose quand n'​importe quel autre paramètre que ceux des expressions,​ est passé au script;   - On se sert de "​l'​étoile"​ pour permettre que soit exécuter quelque chose quand n'​importe quel autre paramètre que ceux des expressions,​ est passé au script;
Ligne 352: Ligne 373:
 Pour modifier la valeur d'une variable d'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 [[doc:​programmation:​shell:​avancee#​boucle-tant-que-while|while]] et [[doc:​programmation:​shell:​avancee#​boucle-pour-tout-for|for]].\\ ​ Pour modifier la valeur d'une variable d'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 [[doc:​programmation:​shell:​avancee#​boucle-tant-que-while|while]] et [[doc:​programmation:​shell:​avancee#​boucle-pour-tout-for|for]].\\ ​
  
-On peut aussi modifier la valeur d'une variable d'un script, en exportant depuis le terminal une nouvelle valeur (voir [[atelier:chantier:​script-bash-variables-arguments-parametres#​exportation-de-la-valeur-d-une-variable|"​export"​]] )+On peut aussi modifier la valeur d'une variable d'un script, en exportant depuis le terminal une nouvelle valeur (voir [[doc:programmation:​shells:​script-bash-variables-arguments-parametres#​exportation-de-la-valeur-d-une-variable|"​export"​]] )
 </​note>​ </​note>​
  
 =====La suite c'est ici===== =====La suite c'est ici=====
-[[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]]+[[doc:programmation:bash:script:tableaux|script-bash-les-tableaux]]
doc/programmation/shells/script-bash-etat-de-sorie-et-les-tests.txt · Dernière modification: 22/10/2015 18:39 par milou

Pied de page des forums

Propulsé par FluxBB