2013-12-11 4 views
2

Linux Bash 스크립트와 관련하여 도움이 필요합니다. 기본적으로 스크립트를 실행하면 사용자로부터 세 세트의 숫자를 묻고 입력 된 숫자를 계산하고 평균을 찾습니다.Bash - 입력 된 숫자의 평균 계산

#!/bin/bash 
echo "Enter a number: " 
read a 
    while [ "$a" = $ ]; do 

echo "Enter a second set of numbers: " 
read b 
b=$ 
    if [ b=$ ] 

나는이 잘못 될 것입니까?

+0

왜 묻는거야? 작동하지 않습니까? 어떤 입력을 사용하고 있으며 결과는 무엇입니까? – Floris

+0

여기에서 어디로 가야할지 잘 모르겠습니다. 스크립트는 사용자 번호를 요청해야하지만 그 후에 평균을 계산하는 방법을 모르겠습니다. – user3089320

+0

처음 읽는 번호의 목표는 무엇입니까? 숫자 목록에서 처음일까요? 사용자가 숫자 사이에 캐리지 리턴을 입력 할 것으로 예상합니까? 아니면 CR은 입력의 끝을 의미합니까? 우리가 도움을 시작할 수 있도록 입력 방법을 명확하게 설명하십시오. – Floris

답변

3

아직 원하는 항목이 확실하지 않습니다. 하지만 3 번 반복 할 수 있다고 생각합니다. 그런 다음 각 반복마다 일련의 숫자를 얻은 다음이를 추가하고 보유한 개수를 추적합니다. 그래서 아래처럼. 난 당신이 무엇을 요구 올바르게, 다음 코드는 할 것 이해하면

#!/bin/bash  
sum=0 
numbers=0 
for a in {1..3}; do 
    read -p $'Enter a set of numbers:\n' b 
    for j in $b; do 
    [[ $j =~ ^[0-9]+$ ]] || { echo "$j is not a number" >&2 && exit 1; } 
    ((numbers+=1)) && ((sum+=j)) 
    done 
done 

((numbers==0)) && avg=0 || avg=$(echo "$sum/$numbers" | bc -l) 
echo "Sum of inputs = $sum" 
echo "Number of inputs = $numbers" 
printf "Average input = %.2f\n" $avg        

예를 출력

Enter a set of numbers: 
1 2 3 
Enter a set of numbers: 
1 2 3 
Enter a set of numbers: 
7 
Sum of inputs = 19 
Number of inputs = 7 
Average input = 2.71 
+0

OP가 실제로 "3 세트"를 원한다면 코드가 매우 좋습니다. "3 개의 숫자 세트"라면 잔인합니다. 어느 쪽이든 당신은 내 표를 얻습니다. – Floris

+0

BroSlow에게 도움을 주셔서 감사합니다. 이것은 내가 필요한 것입니다. 사용하기 쉽고 위대한 작품! – user3089320

+0

@ user3089320 당신이 선호하는 답변이기 때문에이 대답 옆에있는 작은 체크 표시를 눌러 "동의"하십시오. – Floris

1

이 될 것입니다 경우 (노트 $ 번호와 $ 합계가 자동으로 0으로 초기화됩니다) :

#!/bin/bash 
echo "Enter three numbers:" 
read a b c 
sum=$(($a + $b + $c)) 
count=3 
result=$(echo "scale=2; 1.0 * $sum/$count" | bc -l) 
echo "The mean of these " $count " values is " $result 

주 -이 코드를 쉽게 확장 할 수 있도록 count을 별개의 변수로 남겼습니다.

bc을 사용하면 부동 소수점 연산 (bash에 내장되지 않음)이 가능합니다. scale=2은 "2 자리 숫자"를 의미합니다.

샘플 실행 :

Enter three numbers: 
3 4 5 
The mean of these 3 values is 4.00 
+1

Floris는 나를 도우려는 것에 계속적인 성원을 보내 주심에 감사드립니다. 그러나 BroSlow는 내가 무엇을 요구했는지 더 잘 이해했습니다. – user3089320

+0

전혀 없음 - 나는 그의 대답을지지하지 않는 것을 보았습니다. 나는 네가하는 말을 알아낼 수 없었다. – Floris

0

테스트 값 :

avg=$(echo "$sum/$total" | bc -l) 
    avg=$(echo "$avg*100" | bc -l) 
    printf "Average input = %.2f\n" $avg 

기본 평균 소요 및 내결함성 비율을 얻을 :

sum=200232320 
    total=30

기본 걸릴 평균 비율이 얻을

을 허용 오차 (

result=$(echo "scale=6; 1.0 * $sum/$total*100" | bc -l) 
    printf "Average input = %.2f\n" $result 

기본 테이크의 평균 비율을 얻을 :

기본 테이크의 평균 비율을 얻을 :

result=$(echo "scale=6; 1.0 * $sum/$total*100" | bc -l) 
    printf "Average input = %.2f\n" $result 

기본 걸릴 평균 및 비율을 얻을

# -- if sum is greater than total we have a problem add in 1.0 to address div by zero 
    [[ $sum -gt $total ]] && result=0 || result=$(echo "scale=6; 1.0 * $sum/$total*100" | bc -l) 
    printf "Average input = %.2f\n" $result 

출력을 :

./test.sh 
    Average input = 66.72 
    Average input = 66.72 
    Average input = 66.72 
    Average input = 66.72