Implementation and Testing

there are many different strategies for implementing a shell

here is the approach I recommend