2016-09-09 25 views
0

複数の演算子で3つ以上の数値を追加すると問題が発生します。 (私はexprの、BC、2つ以上の変数を追加できません

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

や他の多くの形態を試みたが、私は3つの変数を持っている時はいつでも、私はこのエラーを取得します。

expr: non-integer argument 
expr: syntax error 

これは私が2つの変数(正常に動作します)でそれを行うときであります

#!/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 

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

絶対に3つの整数を追加できます。これは、すべての変数が整数ではないことを意味します。 –

+0

ところで、あなたのフォーマットに合ったデータファイルを作成するために答えをテストしたい人はいないように、質問自体にエラーを再現するのに必要なすべてのデータを含むことを意味します。 –

答えて

2

シェルは絶対にこれをサポートしています。したがって、問題はあなたのデータにあります。実行...

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

、および出力6hereを示す:次のことを試してみてください。同様に


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

...実行、および出力6hereを示します。

+2

私はここで激しく推測していますが、データファイルにはWindows/DOSスタイルの行末(改行+改行)が含まれていることがあります。 S3であり、整数ではない。もう1つの可能性は、ファイルに6つ以上のフィールドがあることです。その場合、余分なものはすべてS3に含まれ、再び非整数になります。私たちは確かに言うためにデータファイルが必要です。 –

関連する問題