Difference between revisions of "BASH/C2/Nested-and-multilevel-if-elsif-statements/English"

From Script | Spoken-Tutorial
Jump to: navigation, search
 
Line 273: Line 273:
  
 
Go to ./'''nestedifelse.sh '''
 
Go to ./'''nestedifelse.sh '''
 +
 +
Press '''Enter'''.
  
 
|-
 
|-
Line 312: Line 314:
  
 
This is because the name '''swati''' does not match the previously declared value '''anusha.'''
 
This is because the name '''swati''' does not match the previously declared value '''anusha.'''
 +
 +
The control comes out of the first '''if statement''' and executes the '''else statement'''.
  
 
|-
 
|-
Line 349: Line 353:
 
| style="border:1pt solid #000000;padding:0.097cm;"| I have a working example.
 
| style="border:1pt solid #000000;padding:0.097cm;"| I have a working example.
  
I will open it.
+
I will open it.  Note that our file name is '''multilevel-ifelse dot sh'''.
  
 
|-
 
|-
Line 382: Line 386:
  
 
'''echo "$mystring contains word raj"'''
 
'''echo "$mystring contains word raj"'''
| style="border:1pt solid #000000;padding:0.097cm;"| The first '''elsif condition '''checks whether''' '''the''' input string''' contains '''raj.'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The first '''elif condition '''checks whether''' '''the''' input string''' contains '''raj.'''
  
 
If it does, then this '''echo statement '''will be printed.
 
If it does, then this '''echo statement '''will be printed.
Line 392: Line 396:
  
 
'''echo "$mystring contains word jit"'''
 
'''echo "$mystring contains word jit"'''
| style="border:1pt solid #000000;padding:0.097cm;"| The next '''elsif condition '''checks whether the''' input string''' contains the word '''jit.'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The next '''elif condition '''checks whether the''' input string''' contains the word '''jit.'''
  
 
If it does, then this '''echo statement '''will be printed.
 
If it does, then this '''echo statement '''will be printed.
Line 402: Line 406:
 
| style="border:1pt solid #000000;padding:0.097cm;"| The '''else condition '''will be executed when all the above '''conditions''' fail.
 
| style="border:1pt solid #000000;padding:0.097cm;"| The '''else condition '''will be executed when all the above '''conditions''' fail.
  
And it will display the message “'''Sorry! Input does not contain raj or jit”'''
+
And it will display the message “'''Sorry! Input does not contain either 'raj' or 'jit'”'''
  
 
|-
 
|-
Line 435: Line 439:
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''Enter a Word:'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''Enter a Word:'''
 
 
 
 
| style="border:1pt solid #000000;padding:0.097cm;"| First I will press '''Enter '''without typing anything.
 
| style="border:1pt solid #000000;padding:0.097cm;"| First I will press '''Enter '''without typing anything.
  
The first '''if condition '''in the '''multilevel if-else''' is satisfied.
 
  
 
|-
 
|-
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Output:''' " Nothing is Entered"'''
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Output:''' " Nothing is Entered"'''
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The message '''Nothing was Entered” '''is displayed.''' '''
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The message "'''Nothing was Entered '''" is displayed.
  
And the control comes out of the '''Multilevel if-else statement.'''
+
And the control comes out of the '''multilevel if-else statement.'''
  
 
|-
 
|-
Line 452: Line 452:
 
| style="border:1pt solid #000000;padding:0.097cm;"| Let me clear the prompt.
 
| style="border:1pt solid #000000;padding:0.097cm;"| Let me clear the prompt.
  
Let us execute the script again with a different input.
+
Let us try executing the script with a different input.
 +
 
 +
Press up arrow key.
 +
 
 +
Go to '''dot slash multilevel hypehn ifelse dot sh'''.
 +
 
 +
Press '''Enter'''.
  
 
|-
 
|-
Line 459: Line 465:
 
Type '''abhijit'''
 
Type '''abhijit'''
  
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| I will type '''abhijit.'''
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The prompt displays '''"Enter a Word".'''
 +
 
 +
I will type '''abhijit.'''
  
 
|-
 
|-
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Output: '''“abijit contains word jit”'''
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Output: '''“abijit contains word jit”'''
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output is displayed as '''“abhijit contains word jit”.'''
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output displayed is '''“abhijit contains word jit”.'''
  
 
This shows that the control flowed to the third '''condition''' in our code.
 
This shows that the control flowed to the third '''condition''' in our code.
Line 498: Line 506:
 
* lesser than 3,
 
* lesser than 3,
 
* or equal to 3,
 
* or equal to 3,
* Or when the user input is empty
+
* or when the user input is empty
  
 
|-
 
|-

Latest revision as of 14:07, 1 February 2014

Title of script: Nested and multilevel if statement in BASH.

Author: Lavitha Pereira

Keywords: video tutorial, Bash shell, Nested if-else, Multilevel if-else


Visual Cue
Narration
Display Slide 1 Dear friends, welcome to the spoken tutorial on

Nested and multilevel if statement in BASH.

Display Slide 2


In this tutorial, we will learn about the
  • Nested if-else and
  • Multilevel if-else statement

We will do this by using a few examples.

Display Slide 3

Prerequisite


spoken-tutorial.org

To follow this tutorial,

You should be familiar with the Linux Operating System.


If not, for relevant tutorials please visit spoken hyphen tutorial dot org.

Display Slide 4

System Requirements

For this tutorial I am using
  • Ubuntu Linux 12.04 OS and
  • GNU Bash version 4.1.10

GNU Bash version 4 or above is recommended to practice this tutorial.

Display Slide 5

Nested If-else

<Flow graph>


Let us understand the flow of Nested if-else statement.

Here, if condition1 is true, then condition 2 is evaluated.

And if condition2 is true, then statement 1 will be executed.

That means, only when both the conditions 1 and 2 are true , then statement 1 will be executed.


If condition1 is false, then statement 3 will be executed.


And if condition 2 is false, then statement 2 will be executed.


Let's see an example.

Open file

On Terminal>> Type gedit nestedifelse.sh>> Press Enter

I have written code in the file nestedifelse.sh

I will open it.

Let me explain the code now.
#!/bin/bash This is the shebang line.
NAME="anusha"


The variable NAME has been assigned the value anusha.
PASSWORD="abc123" The variable PASSWORD has been assigned the value abc123.
read -p "Enter Name: " myname The read command reads one line of data from the standard input.

- (hyphen) p flag displays the prompt.

The string after - (hyphen) p, “Enter name: ” will be displayed on the terminal.

myname is a variable which stores the text entered by user i.e. the user input.

if [ "$myname" = "$NAME" ]; then The first if statement compares the two variables myname and NAME.

i.e. the user input and the value stored in variable Name i.e. anusha.

If the two values match, then the rest of the code in this if statement will be evaluated.

read -s -p "Password:" mypassword The read command reads and stores the entered password in variable mypassword.

Here,

- (hyphen) s flag is for silent mode.

It means the text entered by the user will NOT be displayed on the terminal.

Highlight

if [ "$mypassword" = "$PASSWORD" ]; then

echo -e "\nWelcome"

else

echo -e "\nWrong password"

fi

Here we have another set of if-else statements.


Highlight the first if This set of if-else statements is nested within the first if statement.
The second if statement compares variables mypassword and PASSWORD.
echo -e "\nWelcome" echo displays the message “Welcome” on the terminal when the if condition is true;

i.e. the passwords match.

-e enables interpretation of backslash escapes.

\n stands for new line;

which means the string “Welcome” will be printed on a new line.

else

echo -e "\nWrong password"


When the if condition is not true, then the else condition will be executed;

i.e. when the passwords don't match, the else condition will be executed.

In this case, echo displays the message “Wrong password”

fi fi ends the inner if-else statement.
else

echo "Wrong name"

Coming back to our first if-else statement.

If the values in myname and NAME don't match, then this else statement will be executed.

This will echo the message “Wrong Name” on the terminal.

fi This fi ends the outer if-else statement.
Switch to Terminal>> Type chmod +x nestedifelse.sh>> press Enter


Now open the terminal window by pressing ctrl+alt and t keys simultaneously on your keyboard.

Make the file executable.

Type:

chmod space plus x space nestedifelse.sh

Type ./nestedifelse>> press Enter Now type dot slash nestedifelse.sh
The program verifies the two conditions

ie Name and Password

when it is executed on the terminal.

Output

[Highlight]

Enter Name:

Here, the prompt displays “Enter Name:”
Type anusha Let us type anusha.
As this condition is true, the next if condition will be evaluated.
Password: Now the prompt says “Password:”
Type abc123 I will type the password as abc123
The password matches with the value in the variable PASSWORD.
Highlight

Output Welcome

So, the prompt displays the message “Welcome”.
Now let us execute the script again.
Press up arrow key>> go to ./nestedifelse.sh>>

Press Enter

Press the up arrow key.


Go to ./nestedifelse.sh

Press Enter.

But this time we will enter the same name, but different password.
Enter Name: anusha

Password: 123

So I will enter the name as anusha and password as 123.
Highlight

Output Wrong password

The name values will match but the password values won't.

So, the message “Wrong password” will be displayed.

This proves that the nested else statement within the first if statement was executed.

Highlight

Output

Enter Name: >>type swati>> Press Enter

Let's execute the script once more.

This time we will give the name as swati and press Enter.

Highlight Output Wrong name


Highlight swati

The message “Wrong name” is displayed.

This is because the name swati does not match the previously declared value anusha.

The control comes out of the first if statement and executes the else statement.

This prints the message “Wrong name”.

<PAUSE>

Now let us look at multilevel if-else statement.
Display slide 6

Multilevel if-else

<Flow graph>

if condition1 is true, then statement1 is executed.

If condition1 is false, then condition 2 is evaluated.

if condition2 is true, then statement 2 is executed .

And if condition 2 is false, then condition N is evaluated.

If condition N is true, then statement N is executed.

And if Condition N is false, then statement X will be executed.

Let's look at an example.
On Terminal>> Type gedit multilevel.sh>> Press enter I have a working example.

I will open it. Note that our file name is multilevel-ifelse dot sh.

Let us go through the code.
#!/bin/bash This is the shebang line.
read -p "Enter a Word : " mystring mystring is a variable which stores the word, input by user, during execution.
if [ -z "$mystring" ]; then


The if condition checks whether input string is null.

- (hyphen) z checks whether length of string is zero.

Type man test on terminal and explore various string comparison.

echo " Nothing is Entered " This echo statement will be printed, if nothing is entered.
elif [[ "$mystring" == *"raj"* ]]; then

echo "$mystring contains word raj"

The first elif condition checks whether the input string contains raj.

If it does, then this echo statement will be printed.

The wildcard character ensures that any word with raj in it, will be identified.

elif [[ $mystring = *"jit"* ]]; then

echo "$mystring contains word jit"

The next elif condition checks whether the input string contains the word jit.

If it does, then this echo statement will be printed.

else

echo "Sorry! Entered Word does not contain raj or jit"

The else condition will be executed when all the above conditions fail.

And it will display the message “Sorry! Input does not contain either 'raj' or 'jit'”

fi fi indicates the end of multilevel if-else statement.
Let us now execute the program.
On the terminal


>> Type chmod +x multilevel.sh>> Press Enter

Come back to our terminal.

Type:

ch mod space plus x space multilevel.sh

Type ./multilevel.sh>> Press Enter Type dot slash multilevel.sh
Enter a Word: We are prompted for an input.

Let us give different inputs and see what happens each time.

Enter a Word: First I will press Enter without typing anything.


Output: " Nothing is Entered" The message "Nothing was Entered " is displayed.

And the control comes out of the multilevel if-else statement.

Go to ./multilevel.sh by Pressing up arrow key>> Press Enter
Let me clear the prompt.

Let us try executing the script with a different input.

Press up arrow key.

Go to dot slash multilevel hypehn ifelse dot sh.

Press Enter.

Enter a Word:

Type abhijit

The prompt displays "Enter a Word".

I will type abhijit.

Output: “abijit contains word jit” The output displayed is “abhijit contains word jit”.

This shows that the control flowed to the third condition in our code.

The first two conditions did not match.

The same logic is applicable for all the conditions.

Try executing the program with different inputs and check the results.

Display Slide 7

Summary

Summary

Let us summarise.

In this tutorial we learnt, the usage of

  • Nested If-else: Name and Password verification and
  • Multilevel if-else: String comparison
Display Slide 8

Assignment

As an assignment, write a program to output different messages when number is
  • greater than 3,
  • lesser than 3,
  • or equal to 3,
  • or when the user input is empty
Display Slide 9


Watch the video available at the link shown below

It summarizes the Spoken Tutorial project

If you do not have good bandwidth, you can download and watch it

Display Slide 10


Spoken Tutorial Workshops

The Spoken Tutorial Project Team

Conducts workshops using spoken tutorials

Gives certificates to those who pass an online test

For more details, please write to

contact@spoken-tutorial.org

Display Slide 11

Acknowledgement

Spoken Tutorial Project is a part of the Talk to a Teacher project

It is supported by the National Mission on Education through ICT, MHRD, Government of India

More information on this Mission is available at: http://spoken-tutorial.org/NMEICT-Intro

Display Slide 12 The script has been contributed by FOSSEE and Spoken Tutorial Team.


This is Ashwini from IIT Bombay.

Thank you for joining.

Contributors and Content Editors

Ashwini, Nancyvarkey