Como iterar através de um loop while de parâmetros para retornar a soma?

0
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

O erro que estou recebendo é

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

O loop while será incrementado para o parâmetro anterior com um +=

    
por Chris Zog 31.01.2017 / 01:32

2 respostas

1

Algo como isto, acho que está tudo bem:

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"

Se você preferir o método de troca de parâmetro, isso também funcionará:

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"
    
por 31.01.2017 / 01:42
2

O Bash não foi projetado para cálculos numéricos. É um orquestrador , não uma "linguagem" no sentido em que C ou Python é. Veja mais detalhes:

A maneira que eu faria isso seria algo como:

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

Ou talvez:

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

Em seguida, ligue da seguinte forma:

$ mysum 5 89 83 7 0 2
186
    
por 31.01.2017 / 03:54

Tags