Посмотрите на оператор shift. Он сдвигает аргументы 2 и далее в позиции 1 и далее, отбрасывая аргумент 1.
sum () { local total=0; while [ $# -gt 0 ]; do total=$(($total + $1)) shift done echo $total }