숫자의 합을 값으로 나누고 싶습니다.

숫자의 합을 값으로 나누고 싶습니다.

이것은 내 Unix 쉘 스크립트 코드입니다.

#! /bin/ksh

echo "Enter your first number:"    
read first

echo "Enter your second number:"    
read second

echo "Enter your third number:"    
read third

SUM=`expr $first + $second + $third`    
AVERAGE="$SUM/3"

echo "The average is $AVERAGE"

기본적으로 사용자가 입력한 3개의 값의 평균을 구하고 싶습니다. 모든 값을 입력한 후의 결과(예: 모든 값의 합이 12가 됨)는 "평균은 12/3입니다."

답변1

여기서 slm의 대답은 Bourne Again 쉘이 아닌 Korn 쉘에 대해 질문했다는 점을 고려하지 못했습니다. (93) Korn 쉘에는 내장 expr명령이 없으므로 exprKorn 쉘 스크립트에서 사용될 때 외부 expr명령을 사용합니다. 이것 자체는 문제가 되지 않습니다. 결국 이것이 Bourne 쉘을 사용하여 작업을 수행하는 방식이며 Bourne 쉘에는 expr내장 명령이 없습니다. 그러나 M. Kohen이 지적했듯이 사람들은 쉘에 내장된 기능이 있을 때 내장 기능을 사용하는 것을 선호할 수 있습니다. Korn 쉘에도 있습니다.

M. Kohen이 지적했습니다.산술 대체Korn 쉘에서 사용 가능합니다. 이것을 기억하는 것이 중요합니다대체이므로 명령으로 실행하지 않으려면 대체 결과로 뭔가를 해야 합니다. M. Kohen의 답변(연산자 우선 순위 오류 수정)의 보다 완전한 형태는 다음과 같습니다.

AVERAGE="$(( (first + second + third) / 3))"

그러나 Korn 쉘에서 이를 달성하는 두 가지 다른 방법이 있습니다. Korn 쉘에는 다음 let과 같은 내장 명령이 있습니다 .산술 평가그것에 관한 모든 주장은 다음과 같습니다.

let "AVERAGE = (first + second + third) / 3"

명령에 대한 각 인수는 표현식이므로 여기처럼 공백을 인용해야 합니다.

또한 ksh 복제 매뉴얼에 "syntactic sugar let"로 설명된 구문이 있습니다. 여기서 표현식은 명령에 대한 단일 인수가 됩니다.

(( AVERAGE = (first + second + third) / 3 ))

추가 읽기

답변2

달러 기호 앞에 이중 괄호를 사용하여 셸에서 내장된 산술 지원을 사용할 수 있습니다.

$(( (first + second + third) / 3))

expr이는 별도의 프로세스(따라서 포크, 실행, 파이프 관리 및 반환)가 필요하지 않은 것보다 더 효율적입니다.

답변3

귀하의 질문에는 원래 Korn Shell 태그가 없어서 나중에 추가했습니다. Bash를 사용하는 경우 다음이 적용됩니다.


이 명령은 expr다양한 수학적 계산을 수행할 수 있습니다. 평균화를 수행하는 데 사용하십시오.

$ AVG=$(expr $SUM / 3)

$(...cmd...)또한 일반적 으로 백틱 대신 이 하위 명령 형식을 사용하는 것이 좋습니다 . 따라서 SUM=줄을 다음과 같이 변경하십시오.

SUM=$(expr $first + $second + $third)

특정 명령이 무엇을 할 수 있는지 확실하지 않은 경우 매뉴얼 페이지를 확인하십시오. 이 명령에는 expr수행할 수 있는 모든 작업이 포함되어 있습니다 man expr.

인용하다

관련 정보