Ce forum est maintenant fermé, seule cette archive statique reste consultable.
  FORUM Rue-Montgallet.com
  OS alternatifs

  incrementation compteur BASH

Bas de page
Auteur Sujet :

incrementation compteur BASH

n°20466
ayanami00
Plus fort que la mort qui tue
Profil : Membre
Posté le 08-08-2006 à 15:23:56  
 

Bonjour,
 
Quelqu'un pourrait me dire de facon precise comment incrementer un compteur sous bash et le fair echo car moi pas moyen il incremente mais le echo me ressort 1 :s
 
morceau du script:
 
i=1
wbinfo -u | grep -vi "^be%" | tr [A-Z] [a-z] |
        while read "U" ;do
                if [[ ! -d "$HD/$U" ]]; then
                        mkdir "$HD/$U" && chown "$U" "$HD/$U" && echo "HomeDir ajoute : $U" > checkad.`date '+%Y%m%d'`.log
let $[i+=1] # j'ai essayé 300 ecriture du letl'erreur sur le echo,positionnement peut etre.
                fi
        done
echo $i >> checkad.`date '+%Y%m%d'`.log
 
 
helppp


Message édité par ayanami00 le 08-08-2006 à 16:23:07
mood
Pub
Posté le 08-08-2006 à 15:23:56  
 

n°20467
P-Y
Profil : Vieux de la vieille
Posté le 08-08-2006 à 15:57:03  
 

i=$(( $i + 1 ))


---------------
Le trikapalanet
n°20469
ayanami00
Plus fort que la mort qui tue
Profil : Membre
Posté le 08-08-2006 à 16:20:17  
 

je teste de suite
 
Mince a marche pas enfin ca incremente si je met un echo dans le if mais dans le renvoi dans le .log il me repond 1  grrr  autre idée?
le bug vient du echo a mon avis


Message édité par ayanami00 le 08-08-2006 à 16:24:02

---------------
Ayanami-Sensei.
A quoi te servirais mon nom, tu es deja mort.
n°20478
ayanami00
Plus fort que la mort qui tue
Profil : Membre
Posté le 09-08-2006 à 09:57:29  
 

on ma fait remarquer en fait que ma variable i du depart n'etait pas une varibale global donc la variable n'etait pas la meme dans le process pere et fils donc voila le bug  
now recherche de comment faire une varibale global et l'utiliser.


---------------
Ayanami-Sensei.
A quoi te servirais mon nom, tu es deja mort.
n°20480
P-Y
Profil : Vieux de la vieille
Posté le 09-08-2006 à 11:02:20  
 

export i :??:


---------------
Le trikapalanet
n°20481
ayanami00
Plus fort que la mort qui tue
Profil : Membre
Posté le 09-08-2006 à 11:40:27  
 

c'est ce que j'ai deja fait mais jdoit bugger ^^


---------------
Ayanami-Sensei.
A quoi te servirais mon nom, tu es deja mort.
n°20498
01iv'
Profil : Membre
Posté le 16-08-2006 à 18:44:16  
 

sinon tu peux essayer:
let i+=1
ou encore
i=$(expr $i + 1)

n°22046
maxMada
Profil : Jeune recrue
Posté le 02-07-2014 à 11:44:31  
 

Je déterre ce thread dans l'espoir que ça serve à quelqu'un.
Ça ne fonctionne pas car le compteur est incrémenté dans un processus fils par rapport à celui où il est initialisé et celui où on veut récupérer sa valeur après la boucle.
Les structures de ce type :

1. cpt=10
2. (echo 1; echo 2; echo 3) | while read var; do
3.   cpt=$((cpt+1))   # une notation pas trop mal pour faire une incrémentation en bash
4.   echo "$var: cpt=$cpt"  # affiche 11, 12, 13
5. done
6. echo $cpt  # affiche 10, pas 13


sont pratiques avec le "while read" (pas besoin de faire de tableau ou de stocker dans un fichier temporaire) mais il n'est pas possible de récupérer une valeur calculée à l'intérieur du while.
C'est à cause du fait que à la ligne 3 on est dans un processus (appelons-le B) différent de celui de la ligne 1 et ligne 6 (processus A). En effet, le pipe de la ligne 2 a pour effet que le processus A fork en donnant un processus B (la sortie standard de A est redirigée vers l'entrée standard de B).
Lorsqu'un processus est forké, son fils B connaît le même environnement que le père A (notamment les variables), mais c'est un environnement distinct (car il est dupliqué au moment du fork).
Le père A ne connaît donc pas la valeur de la variable $cpt du fils B, et $cpt vaut toujours la même chose qu'avant le "| while", soit 10 dans l'exemple. L'export ne résoud rien car ça export les variables du père vers le fils, pas dans l'autre sens.
Donc pour avoir la valeur 13 dans $cpt à la fin, il faut éviter le pipe "|".
Par exemple :

1. while read var; do
2.   cpt=$((cpt+1));
3.   echo "$var. cpt=$cpt"; done << EOF
4. done << EOF
5. $(echo 1; echo 2; echo 3)
6. EOF


 
Entrée, sortie, redirection : http://www.tuteurs.ens.fr/unix/shell/entreesortie.html

  FORUM Rue-Montgallet.com
  OS alternatifs

  incrementation compteur BASH

© 2000-2024 Forum.rue-montgallet.com - Tous droits réservés