2016-04-26 26 views
0

私はbashスクリプトの初心者です。 10の倍数の平均値を10から190までのすべての平均値を求める簡単なコードを書きました。 コード:コードが機能しないのはなぜですか?

#!/bin/bash 

a=10 

ans=0 

while[ $a -le 190 ] 

do 

ans=`expr $a + $ans' 
a=`expr $a + 10' 

done 

echo "$ans" 

このプログラムで何が問題になっていますか?

+2

基本的なエラーについてはhttp://www.shellcheck.net/のコードを貼り付けてください。それらを訂正し、それでも問題がある場合は編集してください。また、[bashスクリプトで数値を追加するにはどうすればいいですか?](http://stackoverflow.com/a/6348941/1983854)にも読んでください。最後に、「働いていない」というのは役に立たない。何が効いていないのか?どのようなエラーがありますか? [ask]を読むことができます。 – fedorqui

+0

ありがとうございます。問題を解決しました。 本当にばかな間違いでした。 :) – hfarwah

+0

次に、何が間違っていたか、最終的には[自分自身の回答を書く](http://stackoverflow.com/help/self-answer)についてのフィードバックを提供するか、または提供された回答の1つを受け入れます溶液。 – fedorqui

答えて

-1

それは、このような閉じた形のソリューションを使用する方が効率的です:

lower=10 
upper=190 
echo $((($upper + $lower)/2)) 
1

あなたはあなたのコードの構文エラーを持って、代わりにこれを試してください - あなたが直面していた

#!/bin/bash 

    a=10 

    ans=0 

    while [ $a -le 190 ] 
    do 
     ans=`expr $a + $ans` 
     a=`expr $a + 10` 
    done 

    echo "$ans" 

エラー -

  • の後にスペースがありません。
  • 'の代わり`の ANS =` exprの$ A + $ ANS' の使用"代わりの` = `exprのする$ A + 10の
  • 使用「
0

ので、あなたのコードの間違いのカップルを持っている、これはあなたの正しいバージョンである:

a=10 

ans=0 

while test $a -le 190 
do 
    a=$(expr $a + 10) 
    ans=$(expr $a + $ans) 

done 

echo $ans 

問題はあなたにもexprが動作するためにあなたが開始に括弧ですべてを置くために持って、それのうちdollar signwhileまたはif文などのループでtestを使用する必要がありますということでした。エコー内の""は、エコーがそれらをすべて同じものとして扱う限り、使用しません。

0

スクリプトの構文に問題があります。あなたが "expr"コマンドの代わりに "let"を使うと、コードを読みやすくすることができます。例:a = 10 + 1とする。ファイルを実行可能なパーミッションで保存するか、 "source"を使用して実行してください。

#!/bin/bash 

a=10 
ans=0 
count=0 
while [ $a -le 190 ]; do 
    ans=`expr $a + $ans` 
    a=`expr $a + 10` 
    count=`expr $count + 1` 
done 

echo "avg: $((ans/count))" 
関連する問題