expr을 사용하여 두 숫자 추가

expr을 사용하여 두 숫자 추가

저는 현재 취득하고 있는 IT 학위 취득을 위해 쉘 스크립팅을 배우고 있습니다. 우리가 제공하는 튜토리얼 중 하나에 표시된 것처럼 두 개의 숫자를 추가하는 작은 스크립트를 작성하려고 합니다.

echo "Enter two numbers"
read num1 num2
sum = 'expr $num1 + $num2'
echo "The sum is = $sum"

그러나 실행 권한을 부여하고 스크립트를 실행하면 이 오류가 발생합니다.

sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory

여기에 이미지 설명을 입력하세요.

Ubuntu와 Fedora에서 실행을 시도했지만 동일한 오류가 발생했습니다. 내가 여기서 무엇을 놓치고 있는지 말해 줄 수 있는 사람이 있나요?

답변1

먼저 과제에서 공백을 제거해야 합니다.

sum='expr $num1 + $num2'

'그런 다음 a `또는 더 나은 것으로 변경해야 합니다 $().

sum=$(expr "$num1" + "$num2")

를 사용하는 것 외에도 expr셸에서 직접 계산을 수행할 수도 있습니다.

sum=$((num1 + num2))

답변2

줄의 백틱을 작은따옴표로 잘못 읽었을 수 있습니다.

sum = 'expr $num1 + $num2'

바라보다그렉의 위키대신 사용하세요 $(...).

이는 예상대로 작동합니다.

sum=$(expr "$num1" + "$num2")

또한 등호(변수 할당) 주위에는 공백이 없습니다.

답변3

expr외부 프로그램에서 사용됩니다.본 쉘(즉, 쉬). Bourne 쉘에는 원래 간단한 산술을 수행하는 메커니즘이 없었습니다. expr백틱의 도움으로 외부 프로그램을 사용합니다 .

백틱(`) 실제로는 명령 대체라고 합니다. 명령 대체는 쉘이 주어진 명령 세트를 실행한 다음 명령을 해당 출력으로 바꾸는 메커니즘입니다.

sum=`expr $num1 + $num2`

존재하다세게 때리다(bourne Again shell) 다음과 같은 시스템을 가지고 있으며 외부 프로그램을 사용하지 않습니다 expr.

sum=$((num1+num2))

외부 프로그램을 사용하고 싶다면 expr. 우리는 다음과 같은 시스템을 가지고 있습니다:

sum=$(expr $num1 + $num2)

관련 정보