User Tools

Site Tools


informatique:linux:programmation_shell

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
informatique:linux:programmation_shell [2019/04/24 07:16] – [read] pteuinformatique:linux:programmation_shell [2019/04/24 07:53] – [pipe ("|")] pteu
Line 123: Line 123:
   * ''${TAB[0]}'' : contenu du premier enregistrement du tableau TAB   * ''${TAB[0]}'' : contenu du premier enregistrement du tableau TAB
   * ''$TAB'' : équivalent de ''${TAB[0]}''   * ''$TAB'' : équivalent de ''${TAB[0]}''
-  * ''${TAB[*]}'' : désigne l'ensemble des enregistrements du tableau TAB+  * ''${TAB[*]}'' ou ''${TAB[@]}'' : désigne l'ensemble des enregistrements du tableau TAB
  
 Comme pour les variables classiques, on peut récupérer la longueur en le précèdent de ''#'' : Comme pour les variables classiques, on peut récupérer la longueur en le précèdent de ''#'' :
Line 243: Line 243:
 ======Les fonctions====== ======Les fonctions======
  
 +=====pipe ("|")=====
 +
 +Le pipe (tube) est une fonction qui permet de chainer la sortie d'une première commande sur l'entrée de la seconde (c'est un tube/canal inter-processus).
 +<code bash>
 +echo "toto et tata" | awk '{$3}'
 + tata
 +</code>
 +
 +Le soucis c'est qu'on ne récupère que le code de retour de la dernière commande du pipe ; et dans l'exemple précédent, awk renvoie toujours 0. Pour résoudre ce soucis, on peut :
 +  * récupérer les codes de retour de chaque commande dans le tableau ''$PIPESTATUS'' (spécifique à bash) :
 +<code bash>
 +false | true
 +echo "${PIPESTATUS[@]}"
 + 1 0
 +</code>
 +  * utiliser la variable ''$pipefail'' (ksh, zsh ou bash) qui va enregistrer le code de retour de la dernière commande qui se terminera en erreur (retour != 0) ; ou à défaut, vaudra 0 si toutes se terminent correctement :
 +<code bash>
 +$ false | true; echo $?
 +0
 +$ set -o pipefail
 +$ false | true; echo $?
 +1
 +</code>
 ===== read ===== ===== read =====
  
Line 251: Line 274:
 Pour afficher un texte avant la saisie on utilise ''-p'' ; on peut récupérer plusieurs saisie d'un seul coup : Pour afficher un texte avant la saisie on utilise ''-p'' ; on peut récupérer plusieurs saisie d'un seul coup :
 <code bash> <code bash>
-read -p "Quel est le nombre indique sur votre CB ? Et le cryptogramme visuel de derrière ?" CARD_NUMBER CRYPTO+read -p "Quel est le numéro de ta CB ? Et le cryptogramme visuel de derrière ?" CARD_NUMBER CRYPTO
 </code> </code>
  
Line 258: Line 281:
 read < fichier.txt read < fichier.txt
  
-souvent utilisé dans une boucle while pour le lire ligne par ligne :+c'est plutôt utilisé dans une boucle whilepour le lire ligne par ligne :
 while read line; do while read line; do
   echo $line   echo $line
Line 275: Line 298:
 done done
 </code> </code>
-Le premier exemple utilise une [[https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html#Process-Substitution|process substitution]], qui permet de référencer l'entrée (''>(list)'') ou la sortie (''<(list)'') d'une commande comme un fichier et non plux un flux ; le second un pipe, mais les 2 se valent.+Le premier exemple utilise une [[https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html#Process-Substitution|process substitution]], qui permet de référencer l'entrée (''>(list)'') ou la sortie (''<(list)'') d'une commande comme un fichier et non plus un flux ; le second un pipe, mais les 2 se valent.
  
 Pour lire depuis une variable : Pour lire depuis une variable :
informatique/linux/programmation_shell.txt · Last modified: 2023/10/02 13:35 by pteu