In: Computer Science
In this assignment you will write your own shell
program, Mav shell (msh), similar to
bourne shell (bash), c-shell (csh), or korn shell (ksh). It will
accept commands, fork a child
process and execute those commands. The shell, like csh or bash,
will run and accept
commands until the user exits the shell.
Your file must be named msh.c
Functional Requirements
Requirement 1: Your program will print out a prompt of msh> when
it is ready to
accept input. It must read a line of input and, if the command
given is a supported shell
command, it shall execute the command and display the output of the
command.
Requirement 2: If the command is not supported your shell shall
print the invalid
command followed by “: Command not found.”
Requirement 3: If the command option is an invalid option then your
shell shall print
the command followed by “: invalid option --” and the option that
was invalid as
well as a prompt to try —help. exec() outputs this automatically
make sure you
pass it on to your user. You have no work for this requirement.
It’s free.
Requirement 4: After each command completes, your program shall
print the msh>
prompt and accept another line of input.
Requirement 5: Your shell will exit with status zero if the command
is “quit” or “exit”.
Requirement 6: If the user types a blank line, your shell will,
quietly and with no other
output, print another prompt and accept a new line of input.
Requirement 7: Your version of Mav shell shall support up to 10
command line
parameters in addition to the command.
Requirement 8: Your shell shall support and execute any command
entered. Any
command in /bin, /usr/bin/, /usr/local/bin/ and the current working
directory
is to be considered valid for testing.
Your shell shall search in the following PATH order:
1. Current working directory,
2. /usr/local/bin
3. /usr/bin
4. /bin
Parameters may also be combined. For example, ps may be executed
as: ps –aef or ps
–a –e -f
Requirement 9: Mav shell shall be implemented using fork(), wait()
and one of the
exec family of functions.
Your Mav shell shall not use system(). Use of system() will result
in a grade of 0.
Requirement 10: Your shell shall support the cd command to change
directories. Your
shell must handle cd ..
Requirement 11: Your shell shall support the showpids command to
list the PIDs of
the last 15 processes spawned by your shell. If there have been
less than 15 processes
spawned then it shall print only those process PIDs
Requirement 12: Your shell shall support the history command which
will list the last
15 commands entered by the user. Typing !n, where n is a number
between 1 and 15 will
result in your shell re-running the nth command. If the nth command
does not exist then
your shell will state “Command not in history.”. The output shall
be a list of
numbers 1 through n and their commands, each on a separate line,
single spaced.
If there are less than 15 commands in the history only list the
commands the user has
entered up to that point.
Requirement 14: Tabs or spaces shall be used to indent the code.
Your code must use
one or the other. All indentation must be consistent.
Requirement 15: No line of code shall exceed 100 characters.
Requirement 16: Each source code file shall have the following
header filled out:
Requirement 17: All code must be well commented. This means
descriptive comments
that tell the intent of the code, not just what the code is
executing.
The following are poor comments.
The following explains the intent:
When in doubt over comment your code.
Requirement 18: Keep your curly brace placement consistent. If you
place curly braces
on a new line , always place curly braces on a new end. Don’t mix
end line brace
placement with new line brace placement.
Requirement 19: Each function should have a header that describes
its name, any
parameters expected any return values, as well as a description of
what the function does.
Requirement 20: Remove all extraneous debug output before
submission. The only
output shall be the output of the commands entered or the shell
prompt.
Administrative
This assignment must be coded in C. Any other language will result
in 0 points.
Theoretically,all shell statements and UNIX commands can be entered in the command line it self.When a group of command has to executed regularly ,they are better stored in a file.all such files are shell scripts,shell programs or shell procedures.shell script can be defined as a group of commands executed in sequence.let's start by describing the steps needed to write and execute a shell script:
step 1: open the file using an editor(e.g.,"vi" or"pico")
ex: $vi firstshellscript.sh.
shell scripts: A UNIX shell is a command language interpreter,the primary purpose of which is to translate command lines typed at a terminal into system actions. the shell itself is a program through which other programs are invoked.there are several different unix shells,among them the cshell(csh),the bourne shell and the korn shell.
one of the oldest shell is the bourne shell.in most unix machines it is available either in its original form.an improvement over the bourne shell was the korn shell.the bourn shell is primary shell.it has all the primary capabilities.
The following unix command tells us which is our current shell environment: echo $SHELL
for example are shell scripting programming,
#!/bin/sh
echo "enter the limit"
read lim
first=0
second=1
echo "Fibonacci series"
echo "$first"
echo "$second"
for((i=0;I<lim;i++))
do
third=$(($first+$second))
echo "$third"
first=$second
second=$third
done
output:
enter the limit 10
Fibonacci series
0
1
1
2
3
5
8
13
21
34
55
89
/bin :common programs,shared by the system ,the system administrator and the users.
bourne shell: The bourne shell is one of a number of unix shell.it is both a command language and a programming language.
#!/bin/sh
# usage:fsplit file1 file2
total=0;lost=0
while read next
do
totl='expr $total+1
case "$next" in
*[A-Za-z]*) echo "$next">> $1;;
*[0-9]") echo"$next">>$2 ;;
*) lost=expr $ lost +1
esac
done
echo "$total lines read ,$lost thrown aay"
Cshell:The cshell has three separates file which are used for customizing its environment.these three files are chrc,login, and logout.
#!/bin/csh
if($#argv==0)then
echo "no number to classify"
else if ($#argv>0)then
set number =$argv[1]
if($ number<0)then
@ class=0
else if (0<=$ number && $number <100)then
@class=1
else if (100<=$number && $number <200)then
@class=2
else
@class=3
end if
echo the number $number is in class $class
end if