2014-11-30 14 views
6

Sto facendo una calcolatrice di base per aggiungere, sottrarre, moltiplicare e dividere.Moltiplicazione con script expr in shell

L'aggiunta funziona, ma non la moltiplicazione. Quando si tenta di moltiplicarsi, ho la risposta "Non hai eseguito correttamente il programma":

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

Ho cercato in giro su google, dove ho trovato il codice \\*, ma ancora non funziona. Qualcuno può fornirmi una soluzione o una spiegazione?

Ecco il mio codice

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

È improbabile che sia necessario "expr"; 'ANSWER = $ (($ 1 + $ 3))', ad esempio, dovrebbe funzionare con qualsiasi shell che probabilmente utilizzi con Linux. – chepner

risposta

4

Le * ha bisogno di ottenere fuoriusciti dal momento che è un carattere speciale nella sintassi della shell. (Se non è sfuggito, verrà espanso nell'elenco di tutti i file nella directory corrente). Ma è necessario utilizzare solo un singolo backslash per evaderlo:

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

Il tuo codice ha molti problemi. Ecco una soluzione. * significa "tutti i file nella directory corrente". Per significare invece un carattere letterale asterisco/moltiplicazione, si deve sfuggire:

./calculator 3 \* 2 

o

./calculator 3 "*" 2 

si hanno anche per raddoppiare citazione "$2", altrimenti * inizierà significa "tutti i file" di nuovo:

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