Assignment 1 The Operating System Shell Solution



Labs 1 and 2 will provide some background for this assignment.

The question is presented from a Linux point of view using the computer science server, which you can reach remotely using ssh or putty from your laptop (see lab 1). If you do this assignment from an MS Windows machine, then make sure to provide the DLL libraries your program uses (if any) so that the TA can run it from their MS Windows machine. It is not the TA’s responsibility to make your program run. The TAs will not debug your program.

I suggest you do this assignment directly from since these are the computers the TA will be using.

You must write this assignment in the C Programming language.

Assignment Question: Building an OS Shell

Your source files:

Your entire application must be built from three c files: shell.c, interpreter.c, and shellmemory.c. These three source files must be built using modular programming techniques (see lab 2). The file shell.c is the primary programming file. It contains the main() and parse() functions. The file interpreter.c contains the interpreter() function. Each command the interpreter() function accepts has a corresponding function that implements the command’s functionality. Give the function the same name as the command. The file shellmemory.c contains the private data structures and public functions that implement the shell memory (lab 2 will also be helpful here).

Compiling your shell:

Compile your application using gcc with the name mysh. To do modular programming, you must compile your application in the following manner:

gcc -c shell.c interpreter.c shellmemory.c gcc -o mysh shell.o interpreter.o shellmemory.o

Running your shell:

From the command line prompt type: ./mysh

What mysh displays to the user:

Welcome to the <your name goes here> shell!

Version 1.0 Created January 2020


The above dollar sign is the prompt. The cursor flashes beside the prompt waiting for the user’s input. From this prompt the user will type in their command and the shell will display the result from that command on the screen (or an error message), and then the dollar sign is displayed again prompting the next command. The user stays in this interface until they ask to quit.

Operating Systems COMP 310 – ECSE 427 McGill University

The command line syntax for your shell is: COMMAND ARGUMENTS.

Each command line command is a single line of text (a string) separated by spaces and terminated by a carriage return. Some commands are a single word, while other commands contain multiple words. Processes each command in a way that is similar to how it was presented in class. You do not need to follow the class slides exactly.

The commands supported by mysh:

The commands are case sensitive.


help Displays all the commands

quit Exits / terminates the shell with “Bye!”

set VAR STRING Assigns a value to shell memory

print VAR Displays the STRING assigned to VAR

run SCRIPT.TXT Executes the file SCRIPT.TXT

There are no other commands (for now).

If the user inputs an unsupported command the shell displays “Unknown command”.

The command set VAR STRING first checks to see if VAR already exists. If it does exist, STRING overwrites the previous value assigned to VAR. If VAR does not exist, then a new entry is added to the shell memory where the variable name is VAR and the contents of the variable is STRING. For example: set x 10 creates a new variable x and assigns to it the string 10. Another example: set name Bob creates a new variable called name with string value Bob. Another example: set x Mary, replaced the value 10 with Mary. Implement the shell memory as an array of struct, not as a linked list. Struct MEM { char *var; char *value; };

The command print VAR first checks to see if VAR exists. If it does not exist, then it displays the error “Variable does not exist”. If VAR does exist, then it displays the STRING. For example: print x from the above example will display Mary.

The command run SCRIPT.TXT assumes that a text file exists with the provided file name. It opens that text file and then sends each line one at a time to the interpreter (as seen in class). The interpreter treats each line of text as a command. Each line affects the shell and the UI. At the end of the script, the file is closed, and the command line prompt is displayed once more. While the script executes the command line prompt is not displayed. For example: run test.txt will begin by opening the file test.txt. If that fails, then an error message is displayed: “Script not found”. If the file is opened, then each line of the file is interpreted. At the end, the file is closed, and the command line prompt is displayed. If an error occurs while executing the script due a command syntax error, then the error is displayed and the script stops executing.

Testing your shell:

The TAs will use and modify the provided text file to test your shell. You can also use this file to test your shell or you can test it the old fashion way by typing input from the keyboard. To use the provided text file, you will need to run your program from the OS command line as follows:

$ ./mysh < testfile.txt

Each line from testfile.txt will be used as input for each prompt your program displays to the user. Instead of typing the input from the keyboard the program will take the next line from the file testfile.txt as the keyboard input.

Make sure your program works in the above way.


Your assignment has a due date plus two late days. If you choose to submit your assignment during the late days, then your grade will be reduced by -5% per day. Submit your assignment to the assignment #1 submission box in myCourses. You need to submit the following:

  • A README.TXT file stating what OS you used: or MS Windows and any other special instructions you think the TA needs to know to run your program.

  • Your version of TESTFILE.TXT. This will be you telling the TA that you know for sure that your program can at least do the following. The TA will run your program with this file and they will also run it with their own version.

  • Submit shell.c, interpreter.c and shellmemory.c (you may want to create .h files, if so, please hand those in as well)

  • Submit the executable (compiled on the appropriate machine).

  • If you used MS Windows and you used a DLL then upload those as well.

You must submit your own work. You can speak to each other for help but copied code will be handled as to McGill regulations.


Your assignment is graded out of 20 points and it will follow this rubric:

  • The student is responsible to provide a working solution for every requirement.

  • The TA grades each requirement proportionally. This means, if the requirement is only 40% correct (for instance), then the student receives only 40% of the points assigned to that requirement.

  • Your program must run to be graded. If it does not run, then the student receives zero for the entire assignment. If your program only runs partially or sometimes, you should still hand it in. You will receive partial points.

  • The TA looks at your source code only if the program runs (correctly or not). The TA looks at your code to verify that you (A) implemented the requirement as requested, and (B) to check if the submission was copied.

Operating Systems COMP 310 – ECSE 427 McGill University

  • Mark breakdown:

  1. 1 point – Source file names. The TA must verify that the student created the three source files shell.c, interpreter.c and shellmemory.c as the only source files in the application. In addition the source files must be populated with at least what was specified in the assignment description for each file. The student is permitted to supply additional helper functions as they see fit, as long as it does not hinder the assignment requirements.

  1. 2 points – Modular programming. If the student wrote their application using modular programming techniques as described in lab 2 (or seen from another course) then they

receive these points.

  1. 1 point – Executable named mysh. The students compiled program must be named mysh.

  1. 2 points – Shell UI as specified. See the assignment specification for the opening UI

screen layout, the error messages, and the general flow of the application as described. For example, prompts are displayed continually until the user exits the application using the quit command.

  1. 1 points – The help command. Displays all the command and description as seen in the

assignment description.

  1. 1 points – The quit command. Terminates the application. Prints “Bye!” and returns the user to their OS.

  1. 3 points – The set command. Creates or overwrites a variable with the new string. o 3 points – The print command. Displays the string or the error message.

o 4 points – The run command. Executes a text file of valid or invalid commands. o 2 points – Program can be tested with the TESTFILE.TXT file

error: Content is protected !!