expr을 사용하여 두 숫자 추가하기


13

현재하고있는 IT의 졸업장을위한 Shell 스크립팅을 배우고 있습니다. 우리가 제공 한 자습서 중 하나와 같이 두 개의 숫자를 추가하는 작은 스크립트를 작성하려고합니다.

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

여기에 이미지 설명을 입력하십시오

우분투와 페도라 모두 에서이 작업을 시도했지만 동일한 오류가 발생합니다. 아무도 내가 여기서 잃어버린 것을 말해 줄 수 있습니까?


답변:


39

먼저 과제를위한 공간을 제거해야합니다. 예 :

sum='expr $num1 + $num2'

당신은 변경해야 'A를 `또는 더 나은에 $():

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

사용하는 대신 expr쉘에서 직접 계산을 수행 할 수도 있습니다.

sum=$((num1 + num2))

3
expr대신 $((...))Bourne 쉘에 이식하려는 의도가 있다면 사용 하지 않는 것이 좋습니다 $(...).
Alan Curry

2
@AlanCurry 지원하지 않는 쉘이 $()있습니까? 내가 아는 한 posix에 필요합니다. 예를 들어 모든 posix 호환 쉘은 다음을 지원해야합니다.$()
Ulrich Dangel

1
@UlrichDangel 원래 Bourne 쉘에는가 없었지만 $(…)죽었습니다 (어딘가 누군가 /bin/shSolaris에서 아직 실행 중일 수 있음).
Gilles 'SO- 악한 중지'

C 쉘은 $(…)모든 버전을 지원하지는 않습니다 .
Scott

변수에 큰 따옴표를 사용하는 목적은 무엇입니까?
kojow7

9

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

sum = 'expr $num1 + $num2'

대신 에 사용 하는 Greg 's Wiki 를 보십시오 $(...).

이것은 예상대로 작동합니다.

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

또한 등호 (변수 할당) 주위에 간격이 없습니다.


1

exprBourne 쉘에서 사용하는 외부 프로그램입니다 (예 : sh). Bourne 쉘에는 원래 간단한 산술을 수행하는 메커니즘이 없었습니다. 그것은 exprbacktick의 도움으로 외부 프로그램을 사용합니다.

백틱 ( ` )은 실제로는 명령 대체라고합니다. 명령 대체는 쉘이 지정된 명령 세트를 수행 한 다음 명령 대신 해당 출력을 대체하는 메커니즘입니다.

sum=`expr $num1 + $num2`

에서 bash는 다음과 같은 systax있다 (본 쉘 다시 쉘), 그것은 extrnal 프로그램을 사용하지 않습니다 expr.

sum=$((num1+num2))

우리는 외부 프로그램을 사용하려는 경우 expr. 우리는 다음과 같은 systax를 가지고 있습니다 :

sum=$(expr $num1 + $num2)

0

bash를 사용하는 경우 다음과 같이 할 수 있습니다.

sum=$((num1+num2))

-1
#!/bin/bash
function add()
{
sum=`expr $a + $b`
echo "Sum is :$sum";
}

echo "Enter the value of a";
read a
echo "Enter the valure of b";
read b
add

또한 코드에 대한 설명을 추가하면 질문을 해결하는 데 어떻게 도움이됩니까?
Tejas

-1

echo "enter first no :"; read a
echo "enter second no :"; read b
echo "sum = `expr $a + $b`"

-2

단일 백틱 ( `키)을 사용할 수 있습니다


1
그것은 백틱이며 $( ... )쉘에서 대신 사용 하는 것이 좋습니다 . 게다가 문제는 OP가 원하지 않는 공간을 사용한다는 것입니다.
vonbrand


-3
echo "addition of two number"

echo "enter a number"
read a
echo "enter a number"
read b

c=`expr $a + $b`

echo $c

3
이것은 질문에 대답하지 않습니다. 약간의 설명이 도움이 될 것입니다.
Bernhard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.