Unix Shell


ICT374 Project

Unix Shell


ICT374 Project

C | GITHUB

A minimal but complete unix shell


Development Team

Chase Percy
Nunzia Sorrentino

Project Planning and Tools

  • Weekly meetings
  • Git with GitHub for source control
  • Build Generation
    • Make
    • CMake
  • CI/CD
    • GitHub Actions
    • Static Analyzer (CPPCheck)
    • Valgrind memcheck
    • Make generation testing
  • Kanban Board


Overview

This was a fun project to work on and to understand how piping and lower level shell functionality is implemented. We had to implement and design a minimal but complete unix shell using C. Nunzia and I had great time management on this project that lead to a high level of polish and testing of the program. I am very happy with the result of this project!


Features developed by me

Tokenization

The tokenizer is responsible for transforming user input into a format that can be processed when the program creates commands from the input. For the tokenization process, I wanted to ensure that it would scale for any future requirements or larger input from a user. A vector-like data structure was created and used when processing and storing user input to cater for this.

Wildcards

Both the * and ? wildcards are supported and are expanded during the tokenization process.

Command Creation

Command creation is converting the tokens into a format that the shell can process. This considers the ? & ; separators and separates commands appropriately.

Shell Built-ins

CD, Change the shell prompt, and exit is provided as built-in shell commands that were executed from the parent shell. The only built-in that was executed in a child process was the PWD command so that its output could be used with file redirection and piping between processes.