Pages : 1
#1 Le 06/09/2009, à 14:23
- yanick_cangaeld
mauvais code ?
Bonjour,
Ce code ne fonctionne pas et je ne trouve pas les erreurs ?
#!/bin/sh
$res=10
until[ $res -eq 0 ]
do
read premier
read second
rest=`expr $premier*$second`
echo $premier*$second
done
Hors ligne
#2 Le 06/09/2009, à 16:16
- alexduf
Re : mauvais code ?
Salut,
Tu devrais poster ce message dans la catégorie "développement / programmation"
Sinon
Ce code ne fonctionne pas et je ne trouve pas les erreurs ?
#!/bin/sh $res=10 until[ $res -eq 0 ] do read premier read second rest=`expr $premier*$second` echo $premier*$second done
La deuxième ligne
$res=10
ne fonctionne pas et c'est normal. Lorsque l'interpreteur rencontre un "$" il cherche a remplacer la variable par sa valeur. Toi ce que tu veux faire, c'est donner une valeur à la variable (qui n'existe pas à ce moment du script)
Donc le dollar, c'est quand tu veux la valeur de la variable, sinon, tu t'en passes :
res=10
Ensuite
until[ $res -eq 0 ]
Until n'est pas définit en sh, mais en bash. De plus il manque un espace entre until et [
donc
#!/bin/sh
à remplacer par
#!/bin/bash
et
until[ $res -eq 0 ]
à remplacer par
until [ $res -eq 0 ]
En fait il y a à peu près une faute par ligne dans ton script. Quand on fait un programme et qu'on débute, il est bon de débuter ligne à ligne notre programme, puis de l'exécuter à chaque fois que c'est possible pour trouver au plus tôt les erreurs.
Allège donc ce que tu veux faire, puis ajoute petite à petit le code que tu veux exécuter.
Bon courage !
Dernière modification par alexduf (Le 06/09/2009, à 16:22)
Hors ligne
#3 Le 06/09/2009, à 16:51
- yanick_cangaeld
Re : mauvais code ?
ok merci je vais écouter tes conseils
Mais pourquoi tu dis qu'il y a à peu près une faute par ligne ? C'est quoi les autres erreurs ?
Hors ligne
#4 Le 06/09/2009, à 17:01
- alexduf
Re : mauvais code ?
Tu le verras bien vite en essayant de l'exécuter
Si tu galères trop reviens par ici, on essayeras de les résoudres mais si je te donnes toutes les réponses comment vas-tu apprendre ?
Hors ligne
#5 Le 06/09/2009, à 17:27
- yanick_cangaeld
Re : mauvais code ?
En même temps dans le cours que je suis c'est marqué nulle part que until ne fonctionne pas en sh .
J'aimerais comprendre aussi pourquoi les autres lignes sont erronées ?
Pour moi read premier veut dire lire la variable premier Mais $premier*$second je ne comprends pas du tout l'expression ?
Hors ligne
#6 Le 06/09/2009, à 17:36
- alexduf
Re : mauvais code ?
Alors pour le until, il semble que j'ai parlé un peu vite, il semble définit dans sh, mea culpa.
Les erreurs que je vois, c'est :
rest=`expr $premier*$second`
Il faut des espaces pour séparer les opérandes des opérateurs avec la fonction expr. De plus, le caractère * est un caractère spécial en shell, il faut donc le protéger avec un \
rest=`expr $premier \* $second`
dans
echo $premier*$second
je ne sais pas si tu veux afficher le résultat de la multiplication ou le vraiment afficher la multiplication que tu as calculé. Si c'est afficher le résultat que tu souhaite, utilise plutot ta variable rest.
enfin, le condition de ton until, est faite sur une variable qui n'est jamais modifiée, donc ta boucle risque d'être infinie ! C'est peut-être ce que tu cherches à faire, mais dans ce cas il y a d'autres façons de faire moins "détournées"
Hors ligne
#7 Le 06/09/2009, à 17:49
- yanick_cangaeld
Re : mauvais code ?
En fait écrire echo $premier * $second me ferait afficher l'expression plutôt que le résultat ?
Mais pour afficher le résultat je devrais définir les variables premier et second ?
Hors ligne
Pages : 1