Pages : 1
#1 Le 02/10/2009, à 10: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, à 10:47
- nochka85
Re : nouveau problème de code
Tu as oublié l'espace entre le if et le [ $res -eq 0 ]; then
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
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
Dernière modification par nochka85 (Le 02/10/2009, à 10:50)
Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 14.04
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, à 10:55
- yanick_cangaeld
Re : nouveau problème de code
ça fonctionne parfaitement je te remercie
Mais pourquoi mettre 2 parenthèses ? res=$(($nb%2))
On est obligé de faire ainsi ?
Hors ligne
#4 Le 02/10/2009, à 11: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
D'ailleurs ton dernier cas ( *)echo "fournissez seulement un nombre,veuillez reesayer" ) ne marche pas
Dernière modification par nochka85 (Le 02/10/2009, à 11:10)
Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 14.04
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, à 11: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, à 11: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
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, à 11:47)
Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 14.04
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, à 12:44
- FRUiT
Re : nouveau problème de code
Tu nous diras combien t'as eu...
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#8 Le 02/10/2009, à 14:13
- yanick_cangaeld
Re : nouveau problème de code
Je te remercie Nochka ça fonctionne effectivement
Pourquoi tu me demandes ça Fruit ?
Hors ligne
#9 Le 03/10/2009, à 08: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, à 09:55
- nochka85
Re : nouveau problème de code
Bah il fonctionne chez moi
Carte mère Asus P7P55D-E; Processeur Intel core i5 760; 8Go RAM PC3-10666; Geforce GTX 460 1024Mo sous Ubuntu 64bits 14.04
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, à 10: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, à 10: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, à 11:33
- Totor
Re : nouveau problème de code
tout simplement parceque tu n'autorises pas les chiffres
-- Lucid Lynx --
Hors ligne
#14 Le 09/10/2009, à 11: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
Hors ligne
#15 Le 09/10/2009, à 11:42
- loutre
Re : nouveau problème de code
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, à 11: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 [url=http://[Merci de relire les règles]/d6wsyxp]au Tchad[/url], vers Compostelle.
Hors ligne
#16 Le 09/10/2009, à 15: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