2014-11-30 33 views
6

Eklemek, çıkarmak, çarpmak ve bölmek için temel bir hesap makinesi yapıyorum.Kabuk betiğinde expr ile çarpma

Ekleme, ancak çarpma değil çalışır.

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

Ben çalışmıyor hala \\* kod buldum google, etrafında arandı, ancak ettik: Ne çarpın girişiminde zaman, "Doğru programı çalışmadı" yanıtını almak. Birisi bana bir çözüm veya açıklama sağlayabilir mi?

İşte benim kod kabuk sözdiziminde özel karakter olduğu için kaçmış almak için

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

Bu 'expr'; ANSWER = $ (($ 1 + $ 3)), örneğin, Linux ile kullanmakta olduğunuz herhangi bir kabuk ile çalışmalıdır. – chepner

cevap

4

* ihtiyacı var. (Eğer kaçmadıysa, geçerli dizindeki tüm dosyaların listesine genişletilecektir). Ama bundan kurtulmak için sadece tek bir ters eğik çizgi kullanmanız gerekir:

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

Kodunuzda birçok sorun var. İşte bir çözüm. *, "geçerli dizindeki tüm dosyalar" anlamına gelir. yerine değişmez bir yıldız/çarpma karakterini demek için, onu kaçmak zorunda:

./calculator 3 \* 2 

veya

./calculator 3 "*" 2 

Ayrıca aksi * yine "tüm dosyaları" anlamına başlayacak alıntı "$2" çift var:

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