Skip to content

This is a project done for CA216. My Shell is an attempt to mimic shell behaviour, work with background processing and IO redirection, while also getting more familiar with C. I believe there are way better implementations, my projects has certain faults and limitations but it is a learning experience.

Notifications You must be signed in to change notification settings

WickTheThird/My-Shell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Help

Operations and Commands

Operations and commands are essential parts of a shell program, and they allow the user to interact with the system and perform various tasks. Here is a detailed description of some of the operations and commands, including cd, clr, dir, environ, echo, help, pause, and quit.

cd: The cd command is used to navigate to different directories on your computer. When you run cd without any arguments, it shows you the current directory that you are in. If you give an argument, it will change your current directory to that directory. For example, cd Documents will change your current directory to the "Documents" directory.

clr: Clear the screen. This command is used to clear the terminal or console screen, removing all previous output and providing a clean slate for new commands or output.

ls: The ls command lists the contents of a directory. It displays the names of files and subdirectories within the directory you specify. For example, running ls Documents will display the contents of the "Documents" directory.

dir: List the contents of a directory. This command is similar to the ls command used in Unix-like operating systems. It allows the user to view the contents of a directory, including files and subdirectories. The command takes an optional argument to specify the directory to list the contents of. For example, "dir /path/to/directory" would list the contents of the directory at the specified path.

mkdir: The mkdir command is used to create a new directory. You simply specify the name of the new directory you want to create as an argument. For example, mkdir new_folder will create a new directory named "new_folder".

rm: The rm command is used to remove files or directories. Be careful with this command as it will permanently delete the specified files or directories without warning. To delete a file, simply specify its name as an argument. For example, rm file.txt will remove the file "file.txt". To delete a directory and its contents, you need to specify the -r flag to recursively delete all files and subdirectories within the directory. For example, rm -r directory will remove the directory and all its contents.

cp: The cp command is used to copy files or directories. To copy a file, simply specify the file name and the name of the copy as arguments. For example, cp file.txt copy.txt will create a copy of "file.txt" named "copy.txt". To copy a directory and its contents, you need to specify the -r flag to recursively copy all files and subdirectories within the directory. For example, cp -r directory copy_directory will create a copy of the directory and all its contents named "copy_directory".

mv: The mv command is used to move or rename files or directories. To move a file or directory, simply specify the original name and the new name or location as arguments. For example, mv file.txt Documents will move "file.txt" to the "Documents" directory. To rename a file or directory, simply specify the original name and the new name as arguments. For example, mv file.txt new_name.txt will rename "file.txt" to "new_name.txt".

cat: The cat command is used to display the contents of a file. You simply specify the name of the file as an argument. For example, cat file.txt will display the contents of "file.txt".

grep: The grep command is used to search for a specific pattern within a file. You specify the pattern you want to search for and the name of the file as arguments. For example, grep "hello" file.txt will search for the word "hello" within "file.txt".

pause: Pause operation of the shell until 'Enter' is pressed. This command halts the operation of the shell program until the user presses the Enter key. This can be useful for pausing a script or batch job while the user reviews or confirms certain actions.

echo: The echo command is used to display a message on the screen. You simply specify the message you want to display as an argument. For example, echo "Hello, world!" will display the message "Hello, world!" on the screen.

environ: List all the environment strings. This command displays a list of all environment variables and their values currently set on the system. This information can be useful for debugging or troubleshooting purposes.

help: Display the user manual using the more filter. This command displays a user manual or help file for the shell program. The output is usually displayed using a pager such as more, allowing the user to scroll through the help file one page at a time.

Examples

cd: To change the current directory to "Documents", you can run:

  • cd Documents

clr: To clear the terminal screen, you can simply run:

  • clr

ls: To list the contents of the current directory, you can run:

  • ls

To list the contents of a specific directory, for example "Documents", you can run:

  • ls Documents

dir: To list the contents of the current directory, you can run:

  • dir

To list the contents of a specific directory, for example "Documents", you can run:

  • dir Documents

mkdir: To create a new directory named "new_folder", you can run:

  • mkdir new_folder

rm: To remove a file named "file.txt", you can run:

  • rm file.txt

To remove a directory named "directory" and all its contents, you can run:

  • rm -r directory

cp: To copy a file named "file.txt" to a new file named "copy.txt", you can run:

  • cp file.txt copy.txt

To copy a directory named "directory" and all its contents to a new directory named "copy_directory", you can run:

  • cp -r directory copy_directory

mv: To move a file named "file.txt" to the "Documents" directory, you can run:

  • mv file.txt Documents

To rename a file named "file.txt" to "new_name.txt", you can run:

  • mv file.txt new_name.txt

cat: To display the contents of a file named "file.txt", you can run:

  • cat file.txt

grep: To search for the word "hello" within a file named "file.txt", you can run:

  • grep "hello" file.txt

pause: To pause the shell program until the user presses the Enter key, you can run:

  • pause

echo: To display the message "Hello, world!" on the screen, you can run:

  • echo "Hello, world!"

environ: To list all environment variables and their values, you can run:

  • environ

help: To display the user manual for the shell program, you can run:

  • help

Environment Concepts

An environment is a collection of variables and their values that exist at a particular time during the execution of a program. These variables may include global variables, local variables, and environment variables, and their values may be integers, characters, strings, or other data types.

The environment of a program can be thought of as a snapshot of the state of the program at a particular moment in time. As the program executes, the environment changes to reflect the results of the program's operations. For example, if a program declares a variable x and assigns it the value 10, then the environment of the program will include a variable named x with the value 10.

There are several different types of environments that are important in computer science, including:

  • Global environment: This is the environment that contains all of the global variables that are used by a program. Global variables are variables that are defined outside of any function or procedure and can be accessed by any part of the program. The global environment is created when the program starts running and is destroyed when the program ends.

  • Local environment: This is the environment that contains all of the local variables that are used by a particular function or procedure. Local variables are variables that are defined inside a function or procedure and can only be accessed by that function or procedure. The local environment is created each time a function or procedure is called and is destroyed when the function or procedure returns.

  • Environment variables: These are variables that are set by the operating system and are available to all programs running on the system. Environment variables are used to store information such as the location of system files, user preferences, and system settings.

  • Activation record: This is a data structure that is used to store information about a particular function or procedure call. The activation record includes the values of the function's local variables, as well as the return address and other information needed to resume execution of the program after the function or procedure returns.

  • Stack: The stack is a data structure that is used to keep track of the order in which functions and procedures are called. Each time a function or procedure is called,- a new activation record is added to the top of the stack. When a function or procedure returns, its activation record is removed from the top of the stack.

  • Heap: The heap is a region of memory that is used for dynamic memory allocation. Programs can allocate memory on the heap using functions such as malloc() and free(). The heap is not organized in any particular order, and memory can be allocated and deallocated in any order.

Examples

Navigate to a directory:

  • cd /path/to/directory

List the contents of a directory:

  • ls

List the contents of a directory in long format:

  • ls -l

Create a new directory:

  • mkdir new_directory

Remove a file:

  • rm file.txt

Remove a directory and all of its contents:

  • rm -r directory/

Copy a file to a new location:

  • cp file.txt /path/to/new/location/

Move a file to a new location:

  • mv file.txt /path/to/new/location/

Find all files in a directory and its subdirectories with a specific extension:

  • find /path/to/directory/ -name "*.txt"

Redirect output to a file:

  • ls > filelist.txt

Redirect input from a file:

  • sort < input.txt

Run a command in the background:

  • ong_running_process &

Standard Input, Standard Output, and Standard Error

Standard Input, Standard Output, and Standard Error are three standard communication channels that are used between a computer program and its environment.

  • Standard Input (stdin) is a stream through which a program reads input from the user or from a file. It is typically attached to the keyboard, but can be redirected to a file or a pipe.
  • Standard Output (stdout) is a stream through which a program writes output to the user or to a file. It is typically attached to the console, but can be redirected to a file or a pipe.
  • Standard Error (stderr) is a stream through which a program writes error messages to the user or to a file. It is typically attached to the console, but can be redirected to a file or a pipe.

In Unix-like operating systems, stdin, stdout, and stderr are represented by file descriptors with the following values:

  • stdin: 0
  • stdout: 1
  • stderr: 2

IO Redirection

IO redirection is a technique that allows a program to use files instead of stdin, stdout, and stderr for input and output. IO redirection can be done using the following symbols:

  • > redirects stdout to a file, overwriting the file if it already exists. For example, ls > file.txt redirects the output of the ls command to the file file.txt.
  • >> redirects stdout to a file, appending the output to the end of the file if it already exists. For example, ls >> file.txt appends the output of the ls command to the file file.txt.
  • < redirects stdin to a file. For example, sort < file.txt reads input from the file file.txt instead of from the keyboard.
  • & runs a command in the background. For example, ls & runs the ls command in the background, allowing the user to continue using the terminal while the command is running.

Background Processing

Background processing is a technique that allows a program to continue running in the background while the user interacts with other programs. In Unix-like operating systems, a program can be run in the background by appending an ampersand "&" to the end of the command line.

When a process is started in the background, the shell prompt is immediately returned to the user, allowing them to continue issuing commands while the background process runs. The background process runs independently of the shell, and its output is usually redirected to a file or to the terminal if not explicitly redirected.

In contrast, when a process is run in the foreground, the shell waits for it to finish before accepting new commands from the user. The standard input, output, and error streams for the foreground process are connected to the terminal where the user is running the shell. This allows the user to interact with the foreground process in real-time, providing input and receiving output.

Overall, understanding stdin, stdout, and background processing is important for working with the command line and shell scripts. It enables users to control the flow of input and output to processes, and to run processes in the background so they can continue working while a long-running process completes.

Examples of IO Redirection and Background Processing

In a typical shell command, the order of the elements is as follows:

[COMMAND]: This is the command that you want to execute, such as ls, cat, or echo.
[ARGUMENTS]: These are any additional arguments that you want to pass to the command. For example, if you want to list the contents of a directory with ls, you might include the directory name as an argument: ls /path/to/directory.

[I/O REDIRECTION SYMBOLS]: These symbols allow you to redirect input or output from a command. The two most common symbols are > and <. > is used to redirect output from a command to a file, while < is used to redirect input from a file to a command. For example, if you want to save the output of the ls command to a file called filelist.txt, you might use the following command: ls > filelist.txt. If you want to provide a file as input to a command, you might use the < symbol. For example, if you have a file called input.txt that you want to provide as input to the sort command, you might use the following command: sort < input.txt.

[BACKGROUND PROCESSING SYMBOLS]: These symbols allow you to run a command in the background, which means that you can continue to use the shell while the command is running. The most common background processing symbol is &. For example, if you want to run a long-running process in the background while you continue to use the shell, you might use the following command: long_running_process &.
Here are some command line examples that demonstrate the use of IO redirection and background processing:

Redirecting output to a file:

ls > filelist.txt This command will save the output of the ls command to a file called filelist.txt.

Redirecting input from a file:

sort < input.txt This command will use the contents of the file input.txt as input to the sort command.

Running a command in the background:

long_running_process & This command will run long_running_process in the background, allowing you to continue to use the shell while it runs.

References

Environment Variables:

I/O Redirection:

Background Processing:

Commands and Operations:

NOTE: searched for the commands in the above

About

This is a project done for CA216. My Shell is an attempt to mimic shell behaviour, work with background processing and IO redirection, while also getting more familiar with C. I believe there are way better implementations, my projects has certain faults and limitations but it is a learning experience.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages