2016-10-22 4 views
1

可変数のパラメータ(数字も含む)を受け入れる短いスクリプトを作成しようとしています。これらのパラメータを合計して合計の数を取得します。入力した数字の平均を求めます。 これは私がこれまで持っていたものです。可変数の変数を追加する

#!/bin/bash 

count=1 
ncount=1 
echo 
echo "please enter number of parameters: " 
read parano 

while [ $parano -ge $numbers$count ] 
    do 
    echo 
    echo "Please enter parameter $count: " 
    read number$ncount 
    let count=count+1 
    let ncount=ncount+1 

done 

Total=$((number$ncounttotal)) 
Average=$((Total/parano)) 

echo 
echo "You have chosen $parano parameters" 
echo 
echo "The average is $Average" 
echo 

問題を抱えている総数を計算するための行だけで、計算するコードを見つけることができないようです。残りの部分はうまくいっているようですが、合計が計算されていないため、平均値は常に0になります。 誰もが考えている?

+0

あなたは '$ numbers $ count'と' number $ counttotal'で動的に変数名を生成しようとしていますが、動作しません。おそらく、代わりに配列を使うべきでしょう。詳細な議論については、[here](http://mywiki.wooledge.org/BashFAQ/006)を参照してください。 –

+0

私はフィードバックとリンクを感謝しています。私はそれを見ていましたが、私はむしろプログラミングにとっては新しいので、すべてが文字通り私の頭の上にあります。あなたはおそらく私に投げ捨てることができますか? @BenjaminW。 –

+0

私は間違っていましたが、このような変数に 'read'を使って代入することは可能ですが、一般的にBashでは変数名を動的に生成することはできず、間接指定が必要です。ここに行く。 –

答えて

1
#!/bin/bash 

[ $# -eq 0 ] && exit 1 

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

average=$(echo "$sum/$#" | bc -l) 

echo $average 

次に好きそれを呼び出す:

./shellscript 1 2 3 

bashが唯一の整数演算を行いますと、それは平均ための素晴らしいではありませんので、私は上記のbcを使用しています。

0

ありがとうございました。私が必要としたものに対する答えは、言及したような配列でした。

#!/bin/bash 

echo 
echo "Please enter number of parameters: " 
read parano 

count=1 
Total=$((0)) 

while [ $parano -ge $numbers$count ] 
    do 
    echo 
    echo "Please enter parameter $count: " 
    read number 
    let count=count+1 
    Total=$(($Total+number)) 

done 

Average=$((Total/parano)) 

echo 
echo "You have chosen $parano parameters" 
echo 
echo "The total is $Total " 
echo 
echo "The average is $Average" 
echo 

回答は合計として配列を作成し、配列に変数を追加していくことでした。少なくともそれは私がそう思うものです。いずれにしても、それはとても感謝しています!