2016-09-09 5 views
0

여러 연산자를 사용하여 3 개 이상의 숫자를 추가 할 때마다 문제가 있습니다. (I는 EXPR, BC,2 개 이상의 변수를 추가 할 수 없습니다.

SUM=$(($S1 + $S2 + $S3)) 

많은 다른 형태의 시도,하지만 난 3 개 변수를 가질 때마다 나는이 오류가 발생합니다.

expr: non-integer argument 
expr: syntax error 

이 내가 두 변수 (잘 작동)와 함께 할 때입니다

#!/bin/sh 
FILE=$1 
while read -r SID FIRST LAST S1 S2 S3 
do 
    SUM=$(expr $S1 + $S2) 
    AVG=$(expr $SUM/3) 
    printf '%d [%d] %s, %s\n' "$AVG" "$SID" "$LAST" "$FIRST" 
done < "$FILE" | sort 

내가 3 개 변수를 수행 할 때 (작동하지 않습니다)

#!/bin/sh 
FILE=$1 
while read -r SID FIRST LAST S1 S2 S3 
do 
    SUM=$(expr $S1 + $S2 + $S3) 
    AVG=$(expr $SUM/3) 
    printf '%d [%d] %s, %s\n' "$AVG" "$SID" "$LAST" "$FIRST" 
done < "$FILE" | sort 


expr: non-integer argument 
expr: syntax error 
,451,515,

TXT 파일

123456789 Lee Johnson 72 85 90 
999999999 Jaime Smith 90 92 91 
888111818 JC Forney 100 81 97 
290010111 Terry Lee 100 99 100 
199144454 Tracey Camp 77 84 84 
299226663 Laney Camp 70 74 71 
434401929 Skyler Camp 78 81 82 
928441032 Jess Forester 85 80 82 
928441032 Chris Forester 97 94 89 
+0

S2 + S3를 사용해 보셨습니까? – John3136

+0

Nope. 절대적으로 3 개의 정수를 추가 할 수 있습니다. 이것은 모든 변수가 정수가 아니라는 것을 의미합니다. –

+0

그런데, 형식에 맞는 데이터 파일을 만들기 위해 자신의 대답을 테스트하려는 사람이 필요하기보다는 질문에 오류를 재현하는 데 필요한 모든 데이터를 포함하는 것이 좋습니다. –

답변

2

쉘이 전혀 지원; 따라서 문제는 데이터에 있습니다. 다음보십시오 :

s1=1 
s2=2 
s3=3 
echo $((s1 + s2 + s3)) 

... 실행, 출력 6, here을 표시합니다. 마찬가지로


:

s1=1 
s2=2 
s3=3 
expr "$s1" + "$s2" + "$s3" 

... 실행하고 출력 6, here를 도시.

+2

나는 여기서 거칠게 짐작할 만하지만 데이터 파일에는 Windows/DOS 스타일의 줄 끝 (캐리지 리턴 + 줄 넘김)이있을 수있다.이 경우 캐리지 리턴이 S3, 그것은 정수가 아닙니다. 또 다른 가능성은 파일에 6 개 이상의 필드가 있으며,이 경우 모든 여분의 필드가 S3에 포함되어 다시 정수가 아닌 필드가됩니다. 확실하게 알기 위해서는 데이터 파일이 필요합니다. –