Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink
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. wink

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]

JérémieR a écrit :

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=4

while [ $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. sad

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. roll
Par contre si quelqu'un a 5 minutes pour m'expliquer ça.
Encore merci, problème résolu. wink

Hors ligne