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".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 02/10/2009, à 11:28

yanick_cangaeld

nouveau problème de code

Bonjour,

Je dois écrire un code pour vérifier la parité d'un nombre :

#!/bin/sh
case $# in
  0)echo -n "fournissez moi un nombre s'il vous plait :$nb"
    nb=$1
    read nb;;
  1)nb=$1
    res=$nb%2
   ;;
  *)echo "fournissez seulement un nombre,veuillez reesayer"
    exit
esac
if[ $res -eq 0 ]; then
    echo "le nombre $1 est pair"
else echo "le nombre $1 est impair"
fi

à l'exécution ça m'affiche else not expected ? Pouvez vous me dire pourquoi ?

Hors ligne

#2 Le 02/10/2009, à 11:47

nochka85

Re : nouveau problème de code

Tu as oublié l'espace entre le if et le [ $res -eq 0 ]; then wink

De plus, ta ligne res=$nb%2 est fausse et mal placée : pour faire un calcul, tu dois le mettre entre $(( et ))... ce qui te donne donc : res=$(($nb%2))

... et cette ligne est donc mal placé car elle ne s'effectue que dans le cas ou tu fournit un argument ... donc, tu dois la sortir de ton case wink


Ce qui donne donc ceci :


#!/bin/sh
case $# in
  0)echo -n "fournissez moi un nombre s'il vous plait :$nb"
    nb=$1
    read nb;;
  1)nb=$1
   ;;
  *)echo "fournissez seulement un nombre,veuillez reesayer"
    exit
esac
res=$(($nb%2))
if [ $res -eq 0 ]; then
    echo "le nombre $nb est pair"
else echo "le nombre $nb est impair"
fi

EDIT : Ah oui, j'oubliais : pour tes echo, $1 ne marche que si tu fournit un argument aussi ... c'est pourquoi tu dois le remplacer par $nb tongue

Dernière modification par nochka85 (Le 02/10/2009, à 11:50)


Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 12.10
Eeepc 701 4G sous Linux Mint 10 Lxde
Site officiel de Glx-Dock/Cairo-Dock : http://www.glx-dock.org/
Dnd2share Unity - Partager vos images sur le forum par drag'n drop

Hors ligne

#3 Le 02/10/2009, à 11:55

yanick_cangaeld

Re : nouveau problème de code

ça fonctionne parfaitement je te remercie wink

Mais pourquoi mettre 2 parenthèses ? res=$(($nb%2))
On est obligé de faire ainsi ?

Hors ligne

#4 Le 02/10/2009, à 12:00

nochka85

Re : nouveau problème de code

oui !

Exemple (tu peux essayer dans un terminal):

$ echo 1+2
1+2
$ echo $(1+2)
bash: 1+2 : commande introuvable

$ echo $((1+2))
3

wink

D'ailleurs ton dernier cas ( *)echo "fournissez seulement un nombre,veuillez reesayer" ) ne marche pas tongue

Dernière modification par nochka85 (Le 02/10/2009, à 12:10)


Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 12.10
Eeepc 701 4G sous Linux Mint 10 Lxde
Site officiel de Glx-Dock/Cairo-Dock : http://www.glx-dock.org/
Dnd2share Unity - Partager vos images sur le forum par drag'n drop

Hors ligne

#5 Le 02/10/2009, à 12:16

yanick_cangaeld

Re : nouveau problème de code

Ben mon dernier cas demande bien de réessayer la frappe d'un nombre ? Pourquoi tu dis que ça marche pas ?

Hors ligne

#6 Le 02/10/2009, à 12:45

nochka85

Re : nouveau problème de code

çà ne marche pas chez moi -> si je lui écrit "toto", il me répond que toto est pair tongue


Moi je ferais çà (mais y'a surement plus propre) :

#!/bin/sh
case $# in
  0)echo -n "fournissez moi un nombre s'il vous plait :$nb"
    nb=$1
    read nb;;
  1)nb=$1
   ;;
esac

if [ "$(echo $nb | grep "^[0-1a-zA-Z]*$")" ]; then
	echo "fournissez seulement un nombre, veuillez reesayer"
	exit 
fi

res=$(($nb%2))
if [ $res -eq 0 ]; then
    echo "le nombre $nb est pair"
else echo "le nombre $nb est impair"
fi

Dernière modification par nochka85 (Le 02/10/2009, à 12:47)


Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 12.10
Eeepc 701 4G sous Linux Mint 10 Lxde
Site officiel de Glx-Dock/Cairo-Dock : http://www.glx-dock.org/
Dnd2share Unity - Partager vos images sur le forum par drag'n drop

Hors ligne

#7 Le 02/10/2009, à 13:44

FRUiT

Re : nouveau problème de code

Tu nous diras combien t'as eu...


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#8 Le 02/10/2009, à 15:13

yanick_cangaeld

Re : nouveau problème de code

Je te remercie Nochka ça fonctionne effectivement smile

Pourquoi tu me demandes ça Fruit ?

Hors ligne

#9 Le 03/10/2009, à 09:22

yanick_cangaeld

Re : nouveau problème de code

En fait ça ne fonctionne pas complètement

ça m'affiche illegal number et ça exécute le programme ensuite ,ça ne m'affiche pas  'fournissez seulement un nombre'

Que dois je faire pour que le code fonctionne correctement ?

Hors ligne

#10 Le 03/10/2009, à 10:55

nochka85

Re : nouveau problème de code

Bah il fonctionne chez moi hmm


Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 12.10
Eeepc 701 4G sous Linux Mint 10 Lxde
Site officiel de Glx-Dock/Cairo-Dock : http://www.glx-dock.org/
Dnd2share Unity - Partager vos images sur le forum par drag'n drop

Hors ligne

#11 Le 03/10/2009, à 11:07

yanick_cangaeld

Re : nouveau problème de code

Heu.. oui ça fonctionne désolé .C'est pour un autre code que ça ne fonctionne pas :

#!/bin/sh
case $# in
 0) echo "il manque deux arguments"
   Echo -n "entrer le premier argument :$nb1"
   read nb1
   echo -n "entrer le deuxième argument :$nb2 "
   read nb2
   ;; 
 1)nb1=$1
   Echo -n "il manque un argument,entrez votre nombre :$nb2 "
   read nb2
   ;;
 2)nb1=$1
   nb2=$2
   ;;
 *)echo "trop d\'arguments veuillez réessayer"
   exit   
esac

if [ "$(echo $nb | grep "^[0-1a-zA-Z]*$")" ]; then
    echo "fournissez seulement un nombre, veuillez reesayer"
    exit 
fi

if [ $nb1 -lt $nb2 ]; then
   echo "$1 inferieur a $2" 
elif [ $nb1 -gt $nb2 ]; then
   echo "$nb2 inferieur a $nb1"
else
   echo « $nb1 est egal a $nb2"
fi

Hors ligne

#12 Le 09/10/2009, à 11:13

yanick_cangaeld

Re : nouveau problème de code

Pourquoi ça ne fonctionne pas avec ce code ?

if [ "$(echo $nb | grep "^[0-1a-zA-Z]*$")" ]; then
    echo "fournissez seulement un nombre, veuillez reesayer"
    exit
fi

ça devrait bien refuser les caractères non numériques ?

Hors ligne

#13 Le 09/10/2009, à 12:33

Totor

Re : nouveau problème de code

tout simplement parceque tu n'autorises pas les chiffres roll


-- Lucid Lynx --

Hors ligne

#14 Le 09/10/2009, à 12:38

yanick_cangaeld

Re : nouveau problème de code

Pourquoi les chiffres ? c'est plutôt les lettres que je n'autorise pas ? Je comprends pas sad

Hors ligne

#15 Le 09/10/2009, à 12:42

loutre

Re : nouveau problème de code

yanick_cangaeld a écrit :

Pourquoi ça ne fonctionne pas avec ce code ?

if [ "$(echo $nb | grep "^[0-1]*$")" ]; then
    echo "fournissez seulement un nombre, veuillez reesayer"
    exit
fi

Dernière modification par loutre (Le 09/10/2009, à 12:43)


=°.°=
J'ai éprouvé l'irrésistible désir d'aller porter ma jeune existence au-delà de l'horizon, là où l'espace et le vent offrent à l'homme une dimension que je voyais comme une éternité palpable. Mes blogs au Tchad, vers Compostelle.

Hors ligne

#16 Le 09/10/2009, à 16:20

yanick_cangaeld

Re : nouveau problème de code

Non ça ne marche pas non plus

#!/bin/sh
case $# in
 0) echo "il manque deux arguments"
   echo -n "entrer le premier argument :$nb1"
   read nb1
   echo -n "entrer le deuxième argument :$nb2 "
   read nb2
   ;;
 1)nb1=$1
   echo -n "il manque un argument,entrez votre nombre :$nb2 "
   read nb2
   ;;
   2)nb1=$1
   nb2=$2
   ;;
 *)echo "il y a trop d'arguments veuillez recommencer"
   exit

esac

if [ "$(echo $nb? | grep "^[0-1]*$")" ]; then
    echo "fournissez seulement un nombre, veuillez reesayer"
    exit

elif [ $nb1 -lt $nb2 ]; then
   echo "$nb1 inferieur a $nb2" 
elif [ $nb1 -gt $nb2 ]; then

   echo "$nb2 inferieur a $nb1"
else
   echo "$nb1 est egal a $nb2"
fi

ça me met les $(  ) en surligné dans le code ?

if [ "$(echo $nb? | grep "^[0-1]*$")" ]; then
    echo "fournissez seulement un nombre, veuillez reesayer"
    exit

ça serait les paranthèses qui seraientt pas au bon endroit ?

Hors ligne

Haut de page ↑