A ver, lo que quieres hacer es bastante fácil. No me voy a meter en profundidad, ya que el código que tienes que hacer es realmente sencillo, solo te voy a facilitar la parte de llamar programa en C y luego, una vez el programa haya terminado, vuelva a lanzar el menu.
Bueno, para ejecutar un programa desde shell script (supongo que es en bash/sh), hay dos maneras:
#!/bin/bash
exec programa parámetros
o sin usar el comando exec
#!/bin/bash
programa parámetros
Como buen shell script que se precie, todo programa (al menos en sistemas *nix) tiende a lanzar una salida al terminar, siendo 0 o 1 si ha terminado correctamente o con errores.
Esto nos permite aprovecharlo para realizar otras operaciones.
Por ejemplo, si queremos que un programa se ejecute cuando el primero ha terminado con errores, haremos:
programa1 parámetros || programa2 parámetros
programa2 se ejecutará si programa1 no finaliza correctamente.
y si queremos que se ejecute algo, cuando el primer programa ha terminado correctamente, haremos:
programa1 parámetros && programa2 parámetros
De esta manera, programa2 se ejecutará cuando programa1 termine.
La ventaja de bash es que trata sus propios elementos como si procesos fueran. Por ejemplo, si hicieramos una función menú, sería algo parecido a esto:
menu () {
echo "Elije opción"
echo "1. Instalar"
echo "2. Jugar"
echo "..."
echo "lo que sea"
}
Al seleccionar una opción, se ejecutaría el programa deseado de la siguiente manera:
#!/bin/bash
...
#también puedes usar exec si te resulta más cómodo para interpretarlo
programa1 parámetros && menu || menu
De esta manera, tanto si programa1 termine bien o termine con errores, siempre volverá a aparecer el menú.
Saludos