合計を返すためにwhileパラメータループを繰り返す方法は?

合計を返すためにwhileパラメータループを繰り返す方法は?
if test $# -lt 1
then
        echo "Please input a valid amount of numbers. Need at least one."
        exit 1
else
        args=0
        while args -eq "$#"; do
                echo $args
                shift
        done
fi

echo $sum
echo $n

私が受け取るエラーは次のとおりです。

./whileParamList: 15: ./whileParamList: args: not found

whileループは前のパラメータで増加します。+=

答え1

Bashは数値計算用に設計されていません。これはアジャスター、C、またはPythonの意味では「言語」ではありません。詳細を見る:


私がする方法は次のとおりです。

mysum() (
  IFS=+
  bc<<<"$*"
)

おそらく:

mysum() (
  IFS=+
  echo "$(($*))"
)

次に、次のように呼び出します。

$ mysum 5 89 83 7 0 2
186

答え2

私の考えでは、このようなことは大丈夫だと思います。

if [[ $# -lt 1 ]]
then
        echo "Please input a valid amount of numbers. Need at least one."
        exit 1
else
        n=$#
        sum=0
        for arg in "$@"
        do
          echo "$arg"
          sum=$(($sum+$arg))
        done
fi

echo "sum=$sum"
echo "number of parameters=$n"

パラメータの移動方法を好む場合は、次のように動作します。

if [[ $# -lt 1 ]]
then
        echo "Please input a valid amount of numbers. Need at least one."
        exit 1
else
        n=$#
        sum=0
        while [[ $# -ne 0 ]];
        do
          echo "arg=$1"
          sum=$(($sum+$1))
          shift
        done
fi

echo "sum=$sum"
echo "number of parameters=$n"

関連情報