My university has a project where you implement a shell in c from scratch with most of the commonly known features of bash -- scripting, file redirection, command substitution, the whole nine yards. Needless to say it's a mess by the end.
Did that for the OS class in 90/91 at UND. Class was taught using an AT&T 3B2. First non-PC class I had that was not on VMS or an IBM mainframe. Was a very interesting project, and keeping the code clean was a bit of a pain.