2014-11-30 10 views
6

Ich mache einen grundlegenden Rechner zum Addieren, Subtrahieren, Multiplizieren und Dividieren.Multiplikation mit Ausdruck im Shell-Skript

Addition funktioniert, aber nicht Multiplikation. Wenn ich zu vermehren versuchen, erhalte ich die „Sie haben das Programm nicht korrekt ausgeführt werden“ Antwort:

$ ./calculator 4 + 5 
9 
$ ./calculator 4 * 5 
You did not run the program correctly 
Example: calculator 4 + 5 

Ich habe auf Google gesucht herum, wo ich den \\* Code gefunden, aber immer noch nicht funktioniert. Kann mir jemand eine Lösung oder Erklärung liefern?

Hier ist mein 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 
+0

Es ist unwahrscheinlich, dass Sie 'expr' brauchen; 'ANSWER = $ (($ 1 + $ 3))' sollte zum Beispiel mit jeder Shell arbeiten, die Sie wahrscheinlich mit Linux verwenden. – chepner

Antwort

4

Die * Bedürfnisse entkommen zu lassen, da es sich um eine spezielle Zeichen in Shell-Syntax ist. (Wenn es nicht maskiert wird, wird es auf die Liste aller Dateien im aktuellen Verzeichnis erweitert). Aber Sie müssen nur einen einzigen Backslash verwenden, um es zu umgehen:

ANSWER=`expr $1 \* $3` 
10

Ihr Code hat viele Probleme. Hier ist eine Lösung. * bedeutet "alle Dateien im aktuellen Verzeichnis". Um stattdessen ein Sternchen und/Multiplikation Zeichen bedeuten, müssen Sie es entkommen:

./calculator 3 \* 2 

oder

./calculator 3 "*" 2 

Sie haben auch Zitat "$2" verdoppeln, sonst * startet „alle Dateien“ wieder Sinn:

#!/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