How can I implement my own basic unix shell in C?


I'm a newbie to process and thread management. My Shell should understand PATH environment variable. It can be set and modified. It runs in two ways -interactive & batch mode. Shell is capable of taking more than one job like ls;ps;wc file;cal. I want to get my hands dirty on signals too. So I should handle ^K , ^c as well.

I know I will have to use execs, forks and pipes but just can't get started.


Many of the Unix books that describe the main system calls also implement a shell to illustrate how and why you might use the various calls. Stevens and Rochkind are two such books:

Your main loop is:

  • read a line (use fgets(3) for a simple shell, readline(3) for a fancy one)
  • parse the command
  • fork and execute the pipelines

To parse the command, there are two common choices. Write a recursive descent parser or use yacc(1) to generate one. It's a lot easier to bang out an initial parser using yacc, but you can totally get stuck debugging it and it really wants to be context-free. I prefer recursive descent but just about everyone else in the world prefers using yacc. (Technically, bison.) If the shell is really really simple, like a homework shell, yacc may be overkill.

To do the lexical analysis you can also roll your own or use flex.

You won't need to use any threads.

This video can help you solving your question :)
By: admin