2014-11-30 5 views
6

나는 더하기, 빼기, 곱하기 및 나누기를위한 기본 계산기를 만들고 있습니다.셸 스크립트에서 expr을 사용하여 곱하기

덧셈 이외에는 곱셈이 적용되지 않습니다.

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

나는이 작동하지 않습니다 아직 나는 \\* 코드를 발견 구글에 주변 검색,하지만 한 : 나는 증식 할 때, 나는 "당신은 제대로 프로그램을 실행하지 않았다"응답을 얻을. 누군가 해결책이나 설명을 제게 제공 할 수 있습니까?

여기 내 코드는 쉘 구문 특수 문자이기 때문에 탈출하려면

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

'expr'이 필요하지는 않습니다. 예를 들어'ANSWER = $ (($ 1 + $ 3))'는 리눅스에서 사용하고있을 가능성이있는 쉘에서 작동해야합니다. – chepner

답변

4

* 필요하다. (이스케이프되지 않으면 현재 디렉토리의 모든 파일 목록으로 확장됩니다.) 그러나 그것을 탈출하기 위해 백 슬래시를 하나만 사용해야합니다.

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

코드에 많은 문제가 있습니다. 다음은 수정 사항입니다. *은 "현재 디렉토리의 모든 파일"을 의미합니다. 대신 리터럴 별표/곱셈 문자를 의미하는, 당신은 그것을 탈출해야 :

./calculator 3 \* 2 

또는

./calculator 3 "*" 2 

또한 그렇지 않으면 * 다시 "모든 파일"을 의미 시작, 인용 "$2"을 두 배로해야합니다 :

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