Je fais une calculatrice de base pour additionner, soustraire, multiplier et diviser.
L'addition fonctionne, mais pas la multiplication. Lorsque j'essaie de multiplier, j'obtiens la réponse "Vous n'avez pas exécuté le programme correctement":
$ ./calculator 4 + 5
9
$ ./calculator 4 * 5
You did not run the program correctly
Example: calculator 4 + 5
J'ai cherché sur google, où j'ai trouvé le \\*
code, mais ne fonctionne toujours pas. Quelqu'un peut-il me fournir une solution ou une explication?
Voici mon code
#!/bin/bash
if [ $# != 3 ]; then
echo You did not run the program correctly
echo Example: calculator 4 + 5
exit 1
fi
if [ $2 = "+" ]; then
ANSWER=`expr $1 + $3`
echo $ANSWER
fi
if [ $2 = "*" ]; then
ANSWER=`expr $1 \\* $3`
echo $ANSWER
fi
exit 0
Votre code a de nombreux problèmes. Voici un correctif. *
signifie "tous les fichiers du répertoire courant". Pour désigner un astérisque/multiplication littéral, vous devez y échapper:
./calculator 3 \* 2
ou
./calculator 3 "*" 2
Vous devez également doubler la citation "$2"
, autrement *
recommencera à signifier "tous les fichiers":
#!/bin/bash
#Calculator
#if [ `id -u` != 0 ]; then
# echo "Only root may run this program." ; exit 1
#fi
if [ $# != 3 ]; then
echo "You did not run the program correctly"
echo "Example: calculator 4 + 5"
exit 1
fi
# Now do the math (note quotes)
if [ "$2" = "+" ]; then echo `expr $1 + $3`
Elif [ "$2" = "-" ]; then echo `expr $1 - $3`
Elif [ "$2" = "*" ]; then echo `expr $1 \* $3`
Elif [ "$2" = "/" ]; then echo `expr $1 / $3`
fi
exit 0
Le *
doit être échappé car il s'agit d'un caractère spécial dans la syntaxe Shell. (S'il n'est pas échappé, il sera étendu à la liste de tous les fichiers du répertoire courant). Mais vous devez utiliser une seule barre oblique inverse pour y échapper:
ANSWER=`expr $1 \* $3`