Was heißt mit wenigen Kommandos? Sollen das eigene Kommandos werden?
Da ich nicht genau weiß, was du alles mit deiner Shell abdecken möchtest, bin ich mir nicht sicher, ob Java die richtige Sprache dafür ist. In C++ würdest du neben Funktionen für das Einlesen von Strings und einer entsprechenden Ausgabe auf jeden Fall die Befehle fork(), execv() und wait brauchen. Mit fork wird ein Kindprozess erzeugt. Auf dem so entstandenen Adressraum kannst du mit mit execv() "rumarbeiten". Wird das Kind wieder beendet, müsste dieses evtl von einem Signal-Handler gemeldet und anschließend eingesammelt werden. Da ein Prozess mehrere Kinder erzeugen kann und diese evtl auch im Vorder- oder Hintergrund laufen, wird auch noch wait() benötigt.
Literatur habe ich nicht zur Hand, die genannten Befehle sind keine Java-Befehle.