Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 06/09/2009, à 15: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, à 17:16

alexduf

Re : mauvais code ?

Salut,
Tu devrais poster ce message dans la catégorie "développement / programmation"

Sinon

yanick_cangaeld a écrit :

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 ! big_smile

Dernière modification par alexduf (Le 06/09/2009, à 17:22)

Hors ligne

#3 Le 06/09/2009, à 17: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, à 18:01

alexduf

Re : mauvais code ?

Tu le verras bien vite en essayant de l'exécuter big_smile
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, à 18: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, à 18: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, à 18: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