#1 Le 21/04/2008, à 13:30
- JérémieR
[resolu] probleme incrémentation boucle while [sh]
Bonjour à tous,
Voilà j'ai un problème lorsque je veux incrémenter une variable dans une boucle while. La solution doit me rigoler aux yeux, malheureusement je ne la trouve pas. Donc si une ame généreuse peut se pencher sur mon problème.
Merdi de votre aide
#!/bin/sh
val_temps=0
LIMITE=4
while [ $val_temps -lt $LIMITE ]
do
echo -n $val_temps
(( val_temps = val_temps + 1 ))
done
Et voici le résultat dans le terminal
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
0./S99Begin: 18: val_temps: not found
Dernière modification par JérémieR (Le 22/04/2008, à 08:54)
Hors ligne
#2 Le 21/04/2008, à 13:40
- Ras'
Re : [resolu] probleme incrémentation boucle while [sh]
val_temps=$(( val_temps + 1 )) ?
EDIT : ah ben non ce sont deux syntaxe équivalentes, j'aurais appris quelque chose...
Sinon le script s'exécute mais y'a un problème quand $val_temps=$LIMITE :
bash -x test
+ val_temps=0
+ LIMITE=4
+ '[' 0 -lt 4 ']'
+ echo -n 0
0+ (( val_temps = val_temps + 1 ))
+ '[' 1 -lt 4 ']'
+ echo -n 1
1+ (( val_temps = val_temps + 1 ))
+ '[' 2 -lt 4 ']'
+ echo -n 2
2+ (( val_temps = val_temps + 1 ))
+ '[' 3 -lt 4 ']'
+ echo -n 3
3+ (( val_temps = val_temps + 1 ))
+ '[' 4 -lt 4 ']'
Le bug arrive après, par contre je sais pas trop pourquoi ?
Dernière modification par Raskal (Le 21/04/2008, à 13:45)
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#3 Le 21/04/2008, à 13:45
- JérémieR
Re : [resolu] probleme incrémentation boucle while [sh]
Malheureusement en remplacant par ton expression, j'ai:
0./S99Begin: 18: arith: synthax error: "val_temps + 1 "
merci de ton aide en tout cas
Hors ligne
#4 Le 21/04/2008, à 13:47
- Ras'
Re : [resolu] probleme incrémentation boucle while [sh]
J'ai édité mon post
Mais j'peux pas plus t'aider :\
En plus j'ai cours :$
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#5 Le 21/04/2008, à 13:52
- santran.cedric
Re : [resolu] probleme incrémentation boucle while [sh]
ben écoute, je ne sais pas, il n'y a pas d'erreur dans ce script bash, il marche parfaitement.
Comment le lance tu, et d'où provient S99begin? tu l'as mis dans un script rc?
Hors ligne
#6 Le 21/04/2008, à 14:00
- JérémieR
Re : [resolu] probleme incrémentation boucle while [sh]
C'est pour une cible embarque et c'est un script de démarrage(d'ou le S99...). Pour le moment j'exécute ce script depuis Ubuntu.
Pour le lancer :
./S99begin
Merci à vous. Si vous avez encore des idées n'hésitez pas.
@ Raskal, ton idée fonctionne mais en bash, pas en sh. Dans mon cas il faut impérativement que ce soit en sh.
En attendant je continue à chercher. Encore merci.
Dernière modification par JérémieR (Le 21/04/2008, à 14:03)
Hors ligne
#7 Le 21/04/2008, à 14:17
- santran.cedric
Re : [resolu] probleme incrémentation boucle while [sh]
résultat sur un terminal, copier coller de ton code:
sh -x S99begin
+ val_temps=0
+ LIMITE=4
+ '[' 0 -lt 4 ']'
+ echo -n 0
0+ (( val_temps = val_temps + 1 ))
+ '[' 1 -lt 4 ']'
+ echo -n 1
1+ (( val_temps = val_temps + 1 ))
+ '[' 2 -lt 4 ']'
+ echo -n 2
2+ (( val_temps = val_temps + 1 ))
+ '[' 3 -lt 4 ']'
+ echo -n 3
3+ (( val_temps = val_temps + 1 ))
+ '[' 4 -lt 4 ']'
t'as mis le script complet dans ton post? comment ce fait-il qu'il y est "18:" dans le message d'erreur, "ligne 18" ?
Hors ligne
#8 Le 21/04/2008, à 14:49
- JérémieR
Re : [resolu] probleme incrémentation boucle while [sh]
Comme tu l'as compris je ne l'ai pas mis en entier. Cependant j'ai testé le script que j'ai posté mais il ne fonctionne pas. Mon shell est mort ???
Toutefois le reste de mon script est opérationnel.
Enfin merci de l'interet que tu porte à mon problème.
test: 1: val_temps: not found
+ [ 0 -lt 4 ]
+ echo -n 0
0+ val_temps = val_temps+1
test: 1: val_temps: not found
+ [ 0 -lt 4 ]
+ echo -n 0
0+ val_temps = val_temps+1
test: 1: val_temps: not found
+ [ 0 -lt 4 ]
+ echo -n 0
0+ val_temps = val_temps+1
test: 1: val_temps: not found
+ [ 0 -lt 4 ]
+ echo -n 0
0+ val_temps = val_temps+1
test: 1: val_temps: not found
+ [ 0 -lt 4 ]
Dernière modification par JérémieR (Le 21/04/2008, à 14:50)
Hors ligne
#9 Le 21/04/2008, à 15:20
- santran.cedric
Re : [resolu] probleme incrémentation boucle while [sh]
Tu as bien la même chose? fait un cat pour voir
cat S99begin
#!/bin/sh
val_temps=0
LIMITE=4
while [ $val_temps -lt $LIMITE ]
do
echo -n $val_temps
(( val_temps = val_temps + 1 ))
done
Hors ligne
#10 Le 21/04/2008, à 15:32
- JérémieR
Re : [resolu] probleme incrémentation boucle while [sh]
root@mach:/home/login/Desktop# cat test
#!/bin/sh
val_temps=0
LIMITE=4
while [ $val_temps -lt $LIMITE ]
do
echo -n $val_temps
((val_temps = val_temps+1))
done
Et voila, nan sérieux c'est bizarre.
Hors ligne
#11 Le 21/04/2008, à 15:52
- santran.cedric
Re : [resolu] probleme incrémentation boucle while [sh]
Et voila, nan sérieux c'est bizarre.
en effet, curieux, surtout que chez moi tout marche nickel. Peut être que c'est ton environnement qui merde, essaye avec chroot ou avec un utilisateur créé spécialement pour le test.
Hors ligne
#12 Le 21/04/2008, à 15:56
- JérémieR
Re : [resolu] probleme incrémentation boucle while [sh]
Ben j'ai essayé avec d'autres utilisateurs(environnements) mais même problème. Je me suis débrouillé pour installer bash sur ma cible embarqué et je n'ai plus ce problème. Toutefois si quelqu'un passe par la et a une solution ce serait bien.
Quoi qu'il en soit merci Cedric.
Hors ligne
#13 Le 21/04/2008, à 16:20
- garnier
Re : [resolu] probleme incrémentation boucle while [sh]
Bonjour,
je vous propose la solution suivante :
#!/bin/sh
val_temps=0
LIMITE=4while [ $val_temps -lt $LIMITE ]
do
echo -n $val_temps "\n"
val_temps=$( expr $val_temps + 1)
done
nb: le caractère d'echapement "\n" dans la chaîne "" n'est pas necessaire mais permet de rendre plus lisible l'execution du script au moyen de sh.
exemple :
sh test.sh
0
1
2
3
cordialement benoit
#14 Le 21/04/2008, à 16:26
- JérémieR
Re : [resolu] probleme incrémentation boucle while [sh]
Malheureusement, encore une fois cela ne marche pas.
0
[: 10: 0+1: bad number
Je dois certainement avoir un truc en vrac par la dedans.
Merci de l'interet que vous portez à mon problème.
Hors ligne
#15 Le 21/04/2008, à 17:00
- garnier
Re : [resolu] probleme incrémentation boucle while [sh]
Bonjour,
ATTENTION :
il est impératif de mettre un espace après $val_temps et également après la symbole + dans l'expression :
val_temps=$( expr $val_temps<mettre un espace ici>+<mettre un espace ici>1)
cordialement benoit
#16 Le 22/04/2008, à 07:39
- babakiller85
Re : [resolu] probleme incrémentation boucle while [sh]
je pense que c'est :
val_temps = $val_temps + 1
Dernière modification par babakiller85 (Le 22/04/2008, à 07:40)
Hors ligne
#17 Le 22/04/2008, à 08:11
- frafa2
Re : [resolu] probleme incrémentation boucle while [sh]
lo
#!/bin/sh
val_temps=0
LIMITE=4
while [ $val_temps -lt $LIMITE ]
do
echo -e "$val_temps"
(( val_temps=val_temps + 1 ))
done
#18 Le 22/04/2008, à 08:54
- JérémieR
Re : [resolu] probleme incrémentation boucle while [sh]
Merci à tous, le problème venant bien des espaces.
Par contre si quelqu'un a 5 minutes pour m'expliquer ça.
Encore merci, problème résolu.
Hors ligne