2016-07-21 15 views
0
#! /bin/bash 
sum=0 
for number in $* 
do 
    x=$((sum + number)) 
    echo $x 
done 

"add"というスクリプトを作成しようとしましたが、実行時に位置パラメータが追加されます。数字を追加するのではなく、ループが通常通りに表示するだけです。例えば。bashループ(for)で算術演算を行う方法がわからない

$ add 1 2 3 4 5 6 
1 
2 
3 
4 
5 
6 

私は間違っていますか?

+0

ところで、 '$ *の数は'一般のコードです匂い - 空白を含むエントリ、グロブとして解釈されるエントリ、その他の場合には問題に遭遇します。それ以外の理由がない限り、 'for number 'を使用します。 "$ @"で数字のために 'do'または'; (両方とも完全に同等です)。これを自動的に検出するhttp://shellcheck.net/も参照してください。 –

答えて

2

sumを更新することはありません。あなたはこれを意味しましたか?

sum=0 
for number in "[email protected]"; do 
    sum=$((sum + number)) 
    echo "$sum" 
done 

(あなたが唯一の最後の合計ではなく、標準出力に書き込ま累計を、必要な場合echo $sumは、ループの外になります。)

+0

これは完璧に機能していましたが、前にsumを更新しようとしましたが、算術括弧内に$を使用していたと思います。どうもありがとうございました。 –

+0

'$((...))'の 'sum'と' $ sum'の唯一の違いは、前者のデフォルトは0で、未定義の場合は0になりますが、後者は構文エラーになります。 – chepner

+0

+1。また、私は好奇心が強いです: '$ sum'が' $((...)) 'の中で構文エラーを起こす条件は?私は 'unset xをテストした。 echo $(($ x + 1)) 'を返し、' 1'を返します。 – John1024

関連する問題