0% found this document useful (0 votes)
11 views

Shell Programming

OS shell programming

Uploaded by

jyothibg
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

Shell Programming

OS shell programming

Uploaded by

jyothibg
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

What is Shell?

A shell is a special user program that provides an interface for the user to use operating
system services. Shell accepts human-readable commands from users and converts them
into something which the kernel can understand. It is a command language interpreter that
executes commands read from input devices such as keyboards or from files. The shell gets
started when the user logs in or starts the terminal.

Shell is broadly classified into two categories –


• Command Line Shell
• Graphical shell
Command Line Shell
Shell can be accessed by users using a command line interface. A special program called
Terminal in Linux/macOS, or Command Prompt in Windows OS is provided to type in the
human-readable commands such as “cat”, “ls” etc. and then it is being executed. The result
is then displayed on the terminal to the user. A terminal in Ubuntu 16.4 system looks like
this –
In the above screenshot “ls” command with “-l” option is executed. It will list all the files
in the current working directory in a long listing format.
Working with a command line shell is a bit difficult for beginners because it’s hard to
memorize so many commands. It is very powerful; it allows users to store commands in a
file and execute them together. This way any repetitive task can be easily automated. These
files are usually called batch files in Windows and Shell Scripts in Linux/macOS systems.
Graphical Shells
Graphical shells provide means for manipulating programs based on the graphical user
interface (GUI), by allowing for operations such as opening, closing, moving, and resizing
windows, as well as switching focus between windows. Window OS or Ubuntu OS can be
considered as a good example which provides GUI to the user for interacting with the
program. Users do not need to type in commands for every action. A typical GUI in the
Ubuntu system –

There are several shells are available for Linux systems like –
• BASH (Bourne Again SHell) – It is the most widely used shell in Linux
systems. It is used as default login shell in Linux systems and in macOS. It can
also be installed on Windows OS.
• CSH (C SHell) – The C shell’s syntax and its usage are very similar to the C
programming language.
• KSH (Korn SHell) – The Korn Shell was also the base for the POSIX Shell
standard specifications etc.
Each shell does the same job but understands different commands and provides different
built-in functions.
What is a terminal?
A program which is responsible for providing an interface to a user so that he/she can
access the shell. It basically allows users to enter commands and see the output of those
commands in a text-based interface. Large scripts that are written to automate and perform
complex tasks are executed in the terminal.
Shell Scripting
Usually, shells are interactive, which means they accept commands as input from users and
execute them. However, sometimes we want to execute a bunch of commands routinely, so
we have to type in all commands each time in the terminal.
As a shell can also take commands as input from file, we can write these commands in a
file and can execute them in shell to avoid this repetitive work. These files are called Shell
Scripts or Shell Programs. Shell scripts are similar to the batch file in MS-DOS. Each
shell script is saved with `.sh` file extension e.g., myscript.sh.
A shell script has syntax just like any other programming language. If you have any prior
experience with any programming language like Python, C/C++ etc. It would be very easy
to get started with it.
A shell script comprises the following elements –
• Shell Keywords – if, else, break etc.
• Shell commands – cd, ls, echo, pwd, touch etc.
• Functions
• Control flow – if..then..else, case and shell loops etc.
Why do we need shell scripts?
There are many reasons to write shell scripts:
• To avoid repetitive work and automation
• System admins use shell scripting for routine backups.
• System monitoring
• Adding new functionality to the shell etc.
Some Advantages of shell scripts
• The command and syntax are exactly the same as those directly entered in the
command line, so programmers do not need to switch to entirely different syntax
• Writing shell scripts are much quicker
• Quick start
• Interactive debugging etc.
Some Disadvantages of shell scripts
• Prone to costly errors, a single mistake can change the command which might be
harmful.
• Slow execution speed
• Design flaws within the language syntax or implementation
• Not well suited for large and complex task
• Provide minimal data structure unlike other scripting languages. etc.\
Types of shell in Linux
8 Types of Linux Shells
• Bourne Shell (sh)
• C Shell (csh)
• TENEX C Shell (tcsh)
• KornShell (ksh)
• Debian Almquist Shell (dash)
• Bourne Again Shell (bash)
• Z Shell (zsh)
• Friendly Interactive Shell (fish)

Basic shell scripts- Shebang or Hashbang


#!/bin/bash
This #! is called shebang or hashbang. The shebang plays an important role in shell scripting,
specially while dealing with different types of shell.
What is Shebang?
The shebang is the combination of the # (pound key) and ! (exclamation mark). This
character combination has a special meaning when it is used in the very first line of the script.
It is used to specify the interpreter with which the given script will be run by default.
So, if the first line of a script is:
#!/bin/bash

It means the interpreter should be bash shell. If the first line is:
#!/bin/zsh
It means the interpreter to be used is Z shell.
The #! is surely special because # is used for comments in shell scripts but here it has a
special meaning.
Shell Scripting – Standard Input, Output and Error – FAQs
1. You can redirect the output of a shell script to a file using the ` >` operator. ...
2. You can use the ` read` command to prompt the user for input within a shell script. ...
3. You can use the ` >/dev/null 2>&1` redirection to discard both standard output and
standard error.
In programming, Decision making is one of the important concepts. The programmer
provides one or more conditions for the execution of a block of code. If the conditions are
satisfied then those block of codes only gets executed. Two types of decision-making
statements are used within shell scripting. They are –
• If-else statement
• case-sac statement
1. If-else statement
If else statement is a conditional statement. It can be used to execute two different codes
based on whether the given condition is satisfied or not. There are a couple of varieties
present within the if-else statement. They are –

if-fi

if-else-fi

if-elif-else-fi

nested if-else
The syntax will be –
if-fi
if [ expression ]; then

statements

fi
if-else-fi
if [ expression ]
then
statement1
else
statement2
fi
if-elif-else-fi
if [ expression1 ]
then
statement1
statement2
.
.
elif [ expression2 ]
then
statement3
statement4
.
.
else
statement5
fi
nested if-else
if [ expression ]
then
statement1
if [ expression ]
then
statement
else
statement
fi
else
statement2
fi
Now understand these concepts using examples.
Example of if-fi
Name="Satyajit"
if [ "$Name" = "Satyajit" ]; then
echo "His name is Satyajit. It is true."
fi
Output
His name is Satyajit. It is true.
In the above example, during the condition checking the name matches and the condition
becomes true. Hence, the block of code present within the if block gets executed. In case
the name doesn’t match then we will not have an output.
Example of if-else-fi
Age=17
if [ "$Age" -ge 18 ]; then
echo "You can vote"
else
echo "You cannot vote"
fi
Output
You cannot vote
In the above example, during the condition checking the Age is 17, so it doesn’t satisfy the
condition of if statement that is the age must be greater than or equal to 18. Hence the code
inside the if block will not get executed and the code written inside the else block will get
executed. Below is the terminal shell pictorial depiction after executing the following script

Example of if-elif-else-fi
Age=17
if [ "$Age" -ge 18 ]; then
echo "You can vote"
elif [ "$Age" -eq 17 ]; then
echo "You can vote after one year"
else
echo "You cannot vote"
fi
Output
You can vote after one year
In the above example, during the condition checking the Age is 17, so it doesn’t satisfy the
condition of if statement that is the age must be greater than or equal to 18 but it has
satisfied the elif condition. So, it has executed the code written within the elif block only.

Example of Nested if-else

echo "Enter subject"


read subject

if [ $subject == 'Linux' ]
then
echo "Enter Marks"
read marks
if [ $marks -ge 30 ]
then
echo "You passed"
else
echo "You failed"
fi
else
echo "Wrong Subject"
fi
Output 1
Enter subject
Linux
Enter Marks
97
You passed
Output 2
Enter subject
Linux
Enter Marks
29
You failed
Output 3
Enter subject
DBMS
Wrong Subject
In the above example, the if statements are nested, which means one if statement is written
inside another one. The following script first checks for the Subject is Linux or not. If the
subject is Linux then it goes to the another if statement and that if statement checks for the
mark are above to consider as a pass or not. Below is the terminal shell pictorial depiction
after executing the following script –

1.1. Making a file-based decision

The file-based decision is basically a type of decision-making based on whether the file
exists or not. A use case of this will be to check for available file permission or to create a
file if it is not available etc. A minimal structure of such script can be written as –
if [ -e gfg.sh ]
then
echo "file exists"
else
echo "file does not exist"
fi
This can be used to check whether a file exists in the home directory or not.
Example of file-based decision
echo "Enter filename"
read filename

if [ -e $filename ]
then
echo "$filename is exits on the directory"
cat $filename

else
cat > $filename
echo "File created"
fi
Output :
First time:
Enter filename
geeks.txt
Hello Geek
File created
Second time:
Enter filename
geeks.txt
geeks.txt is exits on the directory
Hello Geek
So, in this above example the first time, the script could not find any file with that file
name, and the else block gets executed. It created the file and put some data into that file.
When we run it a second time with the same file name, then it finds the file. So, is the if
block gets executed and that displays the contents of the file. Below is the terminal shell
pictorial depiction after executing the following script –

1.2. String-based Condition

The string-based condition means in the shell scripting we can take decisions by doing
comparisons within strings as well. Here is a descriptive table with all the operators –

Operator Description

== Returns true if the strings are equal

!= Returns true if the strings are not equal

-n Returns true if the string to be tested is not null

-z Returns true if the string to be tested is null

Below is the usage of all of them –


# ==
if [ 'Geeks' == 'Geeks' ];
then
echo "same" #output
else
echo "not same"
fi

# !=
if [ 'Geeks' != 'Apple' ];
then
echo "not same" #output
else
echo "same"
fi

# -n
if [ -n "Geeks" ];
then
echo "not null" #output
else
echo "null"
fi

# -z
if [ -z "Geeks" ];
then
echo "null"
else
echo "not null" #output
fi
Output:
same
not same
not null
not null
Below is the terminal shell pictorial depiction after executing the following script –

1.3. Arithmetic-based Condition

Arithmetic operators are used for checking the arithmetic-based conditions. Like less than,
greater than, equals to, etc. Here is a descriptive table with all the operators –

Operator Description

-eq Equal

-ge Greater Than or Equal

-gt Greater Than

-le Less Than or Equal

-lt Less Than

-ne Not Equal

Below is the usage of all of them –


# -eq
if [ 10 -eq 10 ];then
echo "Equal"
fi

# -ge
if [ 10 -ge 9 ];then
echo "Greater or equal"
fi

# -gt
if [ 10 -gt 8 ];then
echo "Greater"
fi

# -le
if [ 10 -le 12 ];then
echo "Less than or equal"
fi

# -lt
if [ 10 -lt 13 ];then
echo "Less than"
fi

# -ne
if [ 10 -ne 13 ];then
echo "Not Equal"
fi
Output:
Equal
Greater or equal
Greater
Less than or equal
Less than
Not Equal
Below is the terminal shell pictorial depiction after executing the following script –

2. The case-sac statement

case-sac is basically working the same as switch statement in programming. Sometimes if


we have to check multiple conditions, then it may get complicated using if statements. At
those moments we can use a case-sac statement. The syntax will be –
case $var in
Pattern 1) Statement 1;;
Pattern n) Statement n;;
esac
Example of case-sac statement
Name="Satyajit"
case "$Name" in
#case 1
"Rajib") echo "Profession : Software Engineer" ;;

#case 2
"Vikas") echo "Profession : Web Developer" ;;
#case 3
"Satyajit") echo "Profession : Technical Content Writer" ;;
esac
Output
Profession : Technical Content Writer
In the above example, the case-sac statement executed the statement which is a part of the
matched pattern here the ‘Name’. Below is the terminal shell pictorial depiction after
executing the following script –

`while` statement in Shell Script in Linux


Here the command is evaluated and based on the resulting loop will execute, if the
command is raised to false then the loop will be terminated that.
#/bin/bash
while <condition>
do
<command 1>
<command 2>
<etc>
done

Implementation of `While` Loop in Shell Script.


First, we create a file using a text editor in Linux. In this case, we are using `vim`editor.
vim looping.sh

You can replace “looping.sh” with the desired name.


Then we make our script executable using the `chmod` command in Linux.
chmod +x looping.sh

#/bin/bash
a=0
# lt is less than operator
#Iterate the loop until a less than 10
while [ $a -lt 10 ]
do
# Print the values
echo $a
# increment the value
a=`expr $a + 1`
done
Explanation:
• #/bin/bash: Specifies that the script should be interpreted using the Bash shell.
• a=0: Initializes a variable a with the value 0.
• while [ $a -lt 10 ]: Initiates a while loop that continues as long as the value a is
less than 10.
• do: Marks the beginning of the loop’s body.
• echo $a: Prints the current value of a the console.
• a=expr $a + 1“: Increments the value of a by 1. The expr command is used for
arithmetic expressions.
• done: Marks the end of the loop.
for` statement in Shell Script in Linux
The for loop operates on lists of items. It repeats a set of commands for every item in a list.
Here var is the name of a variable and word1 to wordN are sequences of characters
separated by spaces (words). Each time the for loop executes, the value of the variable var
is set to the next word in the list of words, word1 to wordN.
Syntax:
#/bin/bash
for <var> in <value1 value2 ... valuen>
do
<command 1>
<command 2>
<etc>
done
Implementation of `for` Loop with `break` statement in Shell Script.
First, we create a file using a text editor in Linux. In this case, we are using `vim`editor.
vim for.sh

You can replace “for.sh” with the desired name.


Then we make our script executable using the `chmod` command in Linux.
chmod +x for.sh

#/bin/bash
#Start of for loop
for a in 1 2 3 4 5 6 7 8 9 10
do
# if a is equal to 5 break the loop
if [ $a == 5 ]
then
break
fi
# Print the value
echo “Iteration no $a”
done
Explanation:
• #/bin/bash: Specifies that the script should be interpreted using the Bash shell.
• for a in 1 2 3 4 5 6 7 8 9 10: Initiates a for loop that iterates over the values 1
through 10, assigning each value to the variable a in each iteration.
• do: Marks the beginning of the loop’s body.
• if [ $a == 5 ]: Checks if the current value a is equal to 5.
• then: Marks the beginning of the conditional block to be executed if
the condition is true.
• break: Exits the loop if the condition is true.
• fi: Marks the end of the conditional block.
• echo "Iteration no $a": Prints a message indicating the current iteration number.
• done: Marks the end of the loop.

You might also like