Es un script recursivo que va calculando los números primos y los agrega a la línea de comandos.
Podés hacer
sh -x script para ver cómo se van dando los cálculos.
Cuando pasé el código a un archivo, lo que vi fue un bucle infinito, ese código no es correcto.
Además de los comentarios que ya tiene, agregaría:
* Se guarda en LIMITE el parámetro de la línea de comandos, supongamos 4
* Se llama a la función Primos con el parámetro 1
* Se calcula n como $1 + 1 (en el primer caso, n=2 porque se llamó a Primos con 1)
* shift elimina uno de los argumentos de la línea de comandos, en este caso como solamente hay 1, queda vacía.
* n = 2, LIMITE=4, por lo que no se sale en el IF
* el FOR itera, si está escrito en esta forma abreviada, sobre los argumentos de línea de comandos ($@). En este caso, como el shift eliminó el único que había, no se hace nada.
* Se llama a Primos con $n $@ $n, es decir "Primos 2 2"
* Se vuelve a calcular n, esta vez quedando con el valor 3 (primer argumento + 1).
* shift deja a $@ como "2" en vez de "2 2"
* n=3, LIMITE=4 => no se sale en el IF
* se entra en el FOR con i=2.
* 2*2 = 4 > 3, por lo que se sale del for vía break.
* Se lama a Primos con $n $@ $n, es decir 3 2 3
* Se vuelve a calcular $n, resultando n = 4
* shift elimina el primer 3 de $@, resultando "2 3"
* n=4=LIMITE, se sale por el IF, imprimiendo el resultado "2 3"
Me parece muy rebuscado, a menos que se quiera explicar un concepto puntual yo lo haría así:
Código BASH:
Ver originalX=2
N=10 # o $1 si se quiere utilizar en un script y que tome el primer argumento
RESULTADO=""
while (( $X * $X < $N ))
do
if (( $N % $X ))
then
echo -n $X # o imprimimos el número, o lo vamos guardando en una variable
RESULTADO="$RESULTADO $X"
fi
done
echo $RESULTADO
Puede tener algún error, lo escribí de memoria. Pero se ve claramente que es mucho más simple :)
Saludos.