Não há necessidade de fazer um loop se você souber que sempre obterá quatro inteiros na linha de comando:
#!/bin/sh
sum=$(( $1 + $2 + $3 + $4 ))
printf 'sum is %d\n' "$sum"
Alternativamente, apenas
#!/bin/sh
printf 'sum is %d\n' "$(( $1 + $2 + $3 + $4 ))"
Para suportar um número arbitrário de argumentos, você precisará fazer um loop:
#!/bin/sh
while [ "$#" -gt 0 ]; do
sum=$(( sum + $1 ))
shift
done
printf 'sum is %d\n' "$sum"
Este script irá iterar sobre seus argumentos de linha de comando, adicionando o primeiro à variável sum e deslocando-o da lista de argumentos da linha de comando, até que nenhum argumento seja deixado. A expansão da variável $# expandirá para o número de argumentos da linha de comando, enquanto shift removerá $1 da lista, deslocando $2 para o seu lugar (e $3 para $2 etc.). / p>
Alternativamente:
#!/bin/sh
for num do
sum=$(( sum + num ))
done
printf 'sum is %d\n' "$sum"
Em vez de mudar constantemente a lista de argumentos da linha de comando, isso faz com que a lista seja desmarcada e, em vez disso, itera sobre ela, adicionando cada uma a sum .
A cabeça do loop for num do também pode ser escrita for num in "$@"; do .