Our major semester project for my Systems Programming class was to create our own personal shell for use on Linux. Upon completion, my submission included functional input/output redirection, pipes, Ctrl+C to cancel running actions, and getting and setting of environment variables.
The main shell logic was written in C++ although some C libraries were necessary. Parsing and interpreting of commands were done with the help of lex and yacc to write regular expressions the computer could understand.