Bonjour à toutes et à tous
voici mon script tout bête
function calcul
{
if [ $2 = '*' ]
then
let "resultat=$1 $2 $3"
echo "Le résultat est : $resultat"
else
let "resultat=$1 $2 $3"
echo "Le résultat est : $resultat"
fi
}
calcul $1 $2 $3
mon souci concerne l'astérisque. L'opération
./mon_programme 2 * 2 retourne l'erreur suivante
./mon_programme: line 8: let: resultat=2 appdata.xml AUTRE: syntax error: invalid arithmetic operator (error token is ".xml AUTRE")
Le résultat est :
auriez vous une explication ?
hubhub
# escape
Posté par Anonyme . Évalué à 1.
./mon_programme 2 \* 2
[^] # Re: escape
Posté par hubhub . Évalué à 1.
avec ./mon_programme 2 \* 2 j'obtiens la même erreur.
# problème argument
Posté par mistiru . Évalué à 1.
Je suis pas actuellement sous linux, mais en attendant, essaie ./mon_programme 2 '*' 2.
Sinon, tu as la solution ./mon_programme 2 x 2
…
then
let "resultat = $1 * $3"
else
…
aussi, je ne connais pas ton programme mais ici, je ne vois pas la différence entre les deux opération dans le then et dans le else.
Comme tu me le présente, j'aurais plutôt utilisé case, mais je ne connais pas le programme
[^] # Re: problème argument
Posté par hubhub . Évalué à 0. Dernière modification le 28 mars 2013 à 15:58.
les deux solutions me renvoient le même type d'erreur.
J'ai essayé case
et comme avec if, j'ai le même type d'erreur qui fait référence à la ligne 9.
# Et comme ça :
Posté par totof2000 . Évalué à 2.
# set -f
Posté par zipe31 . Évalué à 2. Dernière modification le 28 mars 2013 à 13:25.
Salut,
Rajoutes "set -f" à ton script.
;-)
[^] # Re: set -f
Posté par hubhub . Évalué à -1.
désolé mais là je ne comprends pas.
La commande set sert à positionner des paramètres et l'option -f concerne un fileName non?
Je ne saisis pas…
[^] # Re: set -f
Posté par zipe31 . Évalué à 1.
Le script :
Exécution :
[^] # Re: set -f
Posté par hubhub . Évalué à 0.
donc le fait de mettre set -f dans le script ne nous permet pas d'écrire
./calculette 2 * 3
par contre, si on écrit set -f en ligne de commande puis si on lance le script, alors
./calculette 2 * 3
Le résultat est 6
Comment insérer set -f dans le script pour faire
./calculette 2 * 3
Le résultat est 6
??
[^] # Re: set -f
Posté par totof2000 . Évalué à 3.
On ne peut pas le faire dans le script : c'est dans le shell courant que l'interprétation est faite.
En gros lorsque tu appelles ton script, ta ligne de commande est évaluée et le "*" est interprété comme "contenu de répertoire courant" avant que le sous-shell de ton script ne soit exécuté, ce qui fait que le script appelé reçoit non pas la valeur "*", mais la valeur interprétée de "*".
[^] # Re: set -f
Posté par hubhub . Évalué à 0.
ok merci beaucoup pour ton aide!
# Et comme ça (bis) ?
Posté par totof2000 . Évalué à 2. Dernière modification le 28 mars 2013 à 14:33.
C'est pacrce que "*" est interprété avant l'appel de ton programme comme étant le contenu du répertoire courant.
Comme ça a été dit plus haut, il faut protéger le caractère "*" pour qu'il ne soit pas interprété avec un \
Ca donne ça :
Ensuite avec let, tu as mal placé tes quotes, et c'est pour ça que ça ne fonctionne pas.
# Solution
Posté par gnumdk (site web personnel) . Évalué à 3.
[gnumdk@arch ~]$ ./plop 3 '*' 3
Le résultat est : 9
[^] # Re: Solution
Posté par totof2000 . Évalué à 2. Dernière modification le 28 mars 2013 à 14:42.
Chez moi avec * ça marche. J'ai eu un autre problème et j'ai cru que les quotes du let étaient mal placées mais aparamment ça ne pose pas problème.
[^] # Re: Solution
Posté par totof2000 . Évalué à 2. Dernière modification le 28 mars 2013 à 14:45.
Je crois que le problème du posteur initial vient de l'appel de la fonction avec les arguments sans les quotes.
[^] # Re: Solution
Posté par hubhub . Évalué à 0.
oui tout à fait
[^] # Re: Solution
Posté par hubhub . Évalué à 1.
merci, c'est parfait et pas besoin de '*' un simple * suffit
./calculette 3 * 3
Le résultat est : 9
[^] # Re: Solution
Posté par hubhub . Évalué à 1.
Comment fait on pour mettre résolu sur la discussion ?
[^] # Re: Solution
Posté par totof2000 . Évalué à 2.
Tu dois pouvoir modifier ton post initial et insérer [résolu] au début :)
[^] # Re: Solution
Posté par gnumdk (site web personnel) . Évalué à 2.
Non, cela fonctionne parce que tu as fait un set -f mais par défaut le * est interprété par le shell.
[^] # Re: Solution
Posté par hubhub . Évalué à 0.
oui je venais de le constater.
Cette commande set -f , je n'arrive pas à la comprendre. J'ai essayé de l'insérer dans mon script mais sans succès.
set -f
function calcul
{
if [ "$2" = "*" ]
then
let "resultat=$1 $2 $3"
echo "Le résultat est : $resultat"
else
let "resultat=$1 $2 $3"
echo "Le résultat est : $resultat"
fi
}
calcul "$1" "$2" "$3"
où et pourquoi ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.