현재 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 

여기에 이미지 설명 입력

우분투와 페도라에서 실행을 시도했지만 동일한 오류가 발생합니다. 누구든지 내가 여기에서 누락 된 부분을 알려주시겠습니까?

댓글

답변

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

sum="expr $num1 + $num2" 

그런 다음 "`로 변경하거나 더 나은 방법으로 :

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

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

sum=$((num1 + num2)) 

댓글

  • iv id =를 사용하려는 동기 $((...)) 대신 “d077711eec”>

는 클래식 Bourne 셸로 이식하려는 욕구이며 ' 좋은 아이디어입니다. $(...)도 방지합니다.

  • @AlanCurry $()를 지원하지 않는 셸이 있습니까? 내가 아는 한 posix에 필요합니다. 모든 posix 호환 쉘은 $()
  • 를 지원해야합니다.

  • @UlrichDangel 원래 Bourne 쉘에는 ' $(…) 그러나 거의 종료되었습니다 (어딘가에서 Solaris에서 여전히 /bin/sh를 실행 중일 수 있음).
  • C Shell은 그렇지 않습니다. t 지원 $(…) – 또는 적어도 모든 버전이 아닙니다.
  • 변수를 큰 따옴표로 묶는 목적은 무엇입니까?
  • 답변

    줄에서 백틱을 작은 따옴표로 잘못 읽었을 것입니다.

    sum = "expr $num1 + $num2"

    $(...) 사용에 대해서는 Greg의 Wiki 를 참조하세요.

    이 예상대로 작동합니다.

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

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

    답변

    expr 본 쉘 (예 : sh). Bourne 쉘은 원래 간단한 산술을 수행하는 메커니즘이 없었습니다. 백틱을 사용하여 expr 외부 프로그램을 사용합니다.

    백틱 (`)는 실제로 명령 대체라고합니다. 명령 대체는 셸이 지정된 명령 집합을 수행 한 다음 해당 출력을 명령 위치.

    sum=`expr $num1 + $num2` 

    bash (bourne again shell) 다음과 같은 systax를 가지며 “외부 프로그램 expr을 사용하지 않습니다.

    sum=$((num1+num2)) 

    외부 프로그램 expr을 사용하려는 경우. 다음과 같은 구문이 있습니다.

    sum=$(expr $num1 + $num2) 

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다