Bucle para Script Calculadora

Buenas.
Estoy diseñando un script calculadora (lo se, es muy típico, pero estoy empezando) y lo consigo sin problemas siempre y cuando sean tan solo dos operandos los que participen en el calculo.

Es decir, estoy buscando conseguir un bucle en el que se me pida si deseo insertar un nuevo digito, en caso afirmativo que me pida el digito y lo almacene en una variable, en caso negativo que me sume todos los digitos almacenados.

Mi problema radica al intentar crear una variable para cada digito... y luego sumarlas....

Esto es lo que tengo y ya me estoy volviendo un poco loco...

#!/bin/ksh

## FUNCION PARA AÑADIR DIGITOS
ADD ()
{
echo "Dime otro numero: "
   read NUM #AQUI NO SOY CAPAZ DE CREAR LAS VARIABLES PARA CADA DIGITO QUE INSERTE

}

### FUNCION PARA SUMAR
SUMA ()
{
let SUMAR # AQUI NO SE COMO SUMAR ESAS SUPUESTAS VARIABLES
  exit 0
}

### BUCLE DE MENU
MENU ()
{
while true; do

echo "Quieres mas? (S/N): \c"
     read OPCION

    case  $OPCION in
         s|S) ADD;;
         n|N) SUMA;;
    esac

done

}

### AQUI EMPEZAMOS
MENU

Supongo que se hara con un for, pero no soy capaz y ya me estoy desesperando... agradeceria cualquier tipo de ayuda...

Muchisisimas gracias!!!

No se nada de ksh, así que sólo diré cosas generales.

Enfocándonos a sumar una serie de números, la solución más simple es tener una única variable, e irle sumando cada valor que vaya ingresando el usuario.

Poniéndole más sazón, una calculadora básica cuenta con otros operadores, (resta, multiplicación, etc.), pero al final sólo necesitas de una variable que vaya almacenando los resultados prelimianares, mientras el usuario siga introducioendo comandos.

Si te diriges a fabricar una calculadora un poco mas sofisticada, de las que les introduces una serie de valores y operadores antes de realizar cualquier cálculo, entonces deberías manejar pilas y/o colas de valores y operadores, y al final ejecutar en orden cada operación, así que la clave aquí son las pilas, o colas, o en todo caso, arreglos ;).

Ni idea de cómo se declara un arreglo en ksh, pero esa es la idea.

Independientemente de que la sintaxis sea la correcta (no tengo ni idea de ksh y estoy con un bloc de notas de xp en un ciber así que no lo he podido probar) creo que tiene que ser algo tan sencillo como esto, o parecido.

#!/bin/ksh
## FUNCION PARA AÑADIR DIGITOS
sumando=0
contador=0
ADD ()
{
echo "Dime otro numero: "
   read NUM
   sumando=sumando+NUM
   contador = contador+1
}

### FUNCION PARA SUMAR
SUMA ()
{
    print "Resultado de la suma de los $contador números = $sumando"
    exit 0
}

### BUCLE DE MENU
MENU ()
{
while true; do

echo "Quieres mas? (S/N): \c"
     read OPCION

    case  $OPCION in
         s|S) ADD;;
         n|N) SUMA;;
    esac

done

}

### AQUI EMPEZAMOS
MENU

Esto me parece que está bastante bien, sin explicaciones farragosas ni florituras, directo al grano.
http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html

Otra forma más enrevesada sería

contador=0
loop=0
SUMAR=0
## FUNCION PARA AÑADIR DIGITOS
ADD ()
{
echo "Dime otro numero: "
   read NUM[contador]
   contador=contador+1
}

### FUNCION PARA SUMAR
SUMA ()
{
until [[$loop]];do
let SUMAR=SUMAR+NUM[loop];loop=loop+1;done
print "blablabla $SUMAR"
  exit 0
}

De este no estoy tan seguro

## FUNCION PARA AÑADIR DIGITOS
ADD ()
{
echo "Dime otro numero: "
   read NUM[contador]
   contador=contador+1
}

Perdon por mi ignorancia.... pero con eso se quedaria en un ciclo infinito no?, es que no veo la condicion.

Saludos.

Tusix escribió:
## FUNCION PARA AÑADIR DIGITOS
ADD ()
{
echo "Dime otro numero: "
   read NUM[contador]
   contador=contador+1
}

Perdon por mi ignorancia.... pero con eso se quedaria en un ciclo infinito no?, es que no veo la condicion.

Saludos.

No, yo ahí no veo ninguna iteración, símplemente me parece que lo que hace esa función es recoger el valor de NUM[i] para cada vez que la llamas e incrementa el valor de $contador para almacenar cada número que recojas en la siguiente posición de la matriz NUM[]. Cuando decidas no ingresar más números para la suma tendrás cada número guardado en una posición del array y los sumarás con la otra función.

NUM[0]=1º número ingresado
NUM[1]=2º número ingresado
...
NUM[n]=nº número ingresado

Se que llego algo que yo trataria de hacer es esto:

# En la funcion suma se sumaran todos los num usados

function SUMA()
{
  total=0

  # Sumar todos los digitos almacenados

  for i in $@
  do
         total+=$i  # Sumando i al total
         shift      # borrandolo del arreglo
  done
}

Necesitas a fuerza crear variables, no puedes usar parametros posicionales?