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

From Script | Spoken-Tutorial
Jump to: navigation, search
Line 13: Line 13:
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| Display Slide 1
 
| style="border:1pt solid #000000;padding:0.097cm;"| Display Slide 1
| style="border:1pt solid #000000;padding:0.097cm;"| Dear friends, Welcome to the spoken tutorial on
+
| style="border:1pt solid #000000;padding:0.097cm;"| Dear friends, welcome to the spoken tutorial on
  
'''More on if-loop in BASH Shell scripting'''
+
'''Nested '''and''' multilevel if statement''' in '''BASH.'''
  
 
|-
 
|-
Line 22: Line 22:
  
  
| style="border:1pt solid #000000;padding:0.097cm;"| In the first part of this tutorial, we will learn the use of
+
| style="border:1pt solid #000000;padding:0.097cm;"| In this tutorial, we will learn about the  
 
+
* '''Nested if-else'''
+
* '''Multilevel if-else'''
+
* and few examples
+
  
 +
* '''Nested if-else '''and
 +
* '''Multilevel if-else statement'''
  
 +
We will do this by using a few examples.
  
 
|-
 
|-
Line 42: Line 41:
  
  
'''If not, for relevant tutorials please visit spoken hyphen tutorial dot org.'''
+
If not, for relevant tutorials please visit '''spoken hyphen tutorial dot org.'''
  
 
|-
 
|-
Line 64: Line 63:
  
  
| style="border:1pt solid #000000;padding:0.097cm;"| Let us understand the flow of''' Nested If-else statement'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| Let us understand the flow of''' Nested if-else statement.'''
  
Here, if '''condition1''' is true''' condition 2''' is evaluated .
+
Here, if '''condition1''' is '''true''',''' '''then '''condition 2''' is evaluated.
  
If''' condition1''' is false then''' statement 3''' will be executed.
+
And if '''condition2''' is '''true''', then''' statement 1''' will be executed.
  
If both the''' conditions''' are 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.
  
And if''' condition 2''' is false , then''' statement 2''' will be executed
 
  
|-
+
If''' condition1''' is '''false, '''then''' statement 3''' will be executed.
| style="border:1pt solid #000000;padding:0.097cm;"| '''Open file'''
+
  
On '''Terminal>> '''Type''' gedit nestedifelse.sh>> '''Press''' Enter'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| Let see an example.
 
  
I have written a nested if code in the file '''nested if-else.sh'''
+
And if''' condition 2''' is '''false''', then''' statement 2''' will be executed.
  
So open the terminal window by pressing,
 
  
'''ctrl+alt+t '''simultaneously on your keyboard.
+
Let's see an example.
  
Type '''gedit nestedifelse.sh &'''
+
|-
 +
| style="border:1pt solid #000000;padding:0.097cm;"| '''Open file'''
  
Press''' Enter'''
+
On '''Terminal>> '''Type''' gedit nestedifelse.sh>> '''Press''' Enter'''
 +
| style="border:1pt solid #000000;padding:0.097cm;"| I have written a '''nestedif '''code in the file''' nestedifelse.sh'''
  
Now type the code as shown here in your''' nestedifelse.sh '''file
+
So, I will go to '''Terminal '''and type '''gedit nestedifelse.sh '''
 +
 
 +
Press''' Enter.'''
  
 
|-
 
|-
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let me explain the code now
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let me explain the code now.
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''<nowiki>#!/</nowiki>bin/bash'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''<nowiki>#!/</nowiki>bin/bash'''
| style="border:1pt solid #000000;padding:0.097cm;"| This is first line of''' bash shell''' script known as''' shebang line'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| We already know that this is the first line of '''bash shell''' script - the''' shebang line.'''
  
 
|-
 
|-
Line 105: Line 103:
  
  
| style="border:1pt solid #000000;padding:0.097cm;"| The variable '''NAME '''has the value '''anusha'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The variable '''NAME '''has been assigned the value '''anusha.'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''PASSWORD<nowiki>="</nowiki>abc123"'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''PASSWORD<nowiki>="</nowiki>abc123"'''
| style="border:1pt solid #000000;padding:0.097cm;"| The variable '''PASSWORD '''has the value '''abc123'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The variable '''PASSWORD '''has been assigned the value '''abc123.'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.176cm;"| '''read -p "Enter Name: " myname'''
 
| style="border:1pt solid #000000;padding:0.176cm;"| '''read -p "Enter Name: " myname'''
| style="border:1pt solid #000000;padding:0.176cm;"| The''' read '''command reads''' one line''' of data from''' standard input .'''
+
| style="border:1pt solid #000000;padding:0.176cm;"| The''' read '''command reads''' one line''' of data from''' '''the '''standard input.'''
 
+
'''-p''' flag displays Prompt.
+
 
+
The string after '''-p '''which is '''“Enter name: ” '''will be displayed on the terminal.
+
 
+
'''myname '''is a''' '''variable which stores the''' '''text entered by user during execution'''.'''
+
  
 +
'''-p''' flag displays the '''prompt'''.
  
 +
The string after '''-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'''.'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''if<nowiki> [ "$</nowiki>myname" = "$NAME" ]; then'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''if<nowiki> [ "$</nowiki>myname" = "$NAME" ]; then'''
| style="border:1pt solid #000000;padding:0.097cm;"| This statement compares two variables '''myname '''and '''NAME'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The first '''if''' statement compares the two variables '''myname '''and '''NAME.'''
  
if the user enter the name “anusha” the condition will be true.
+
i.e. the user input and the value stored in variable''' Name '''i.e.''' anusha.'''
  
It will now ask for the password.
+
If the two values match, then the rest of the code in this '''if statement '''will be evaluated.
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''read -s -p "Password:" mypassword'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''read -s -p "Password:" mypassword'''
| style="border:1pt solid #000000;padding:0.097cm;"| This reads and stores the entered password in variable '''mypassword'''.
+
| style="border:1pt solid #000000;padding:0.097cm;"| The '''read command''' reads and stores the entered password in variable '''mypassword'''.
  
 
Here,  
 
Here,  
Line 140: Line 135:
 
'''-s '''flag is for''' silent mode. '''
 
'''-s '''flag is for''' silent mode. '''
  
It means the text entered by the user will NOT be displayed on the terminal
+
It means the text entered by the user will NOT be displayed on the '''terminal.'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| Highlight
 
| style="border:1pt solid #000000;padding:0.097cm;"| Highlight
  
'''if<nowiki> [ "$</nowiki>mypassword" = "$PASSWORD" ]; then'''
+
'''<nowiki>if [ "$mypassword" = "$PASSWORD" ]; then</nowiki>'''
| style="border:1pt solid #000000;padding:0.097cm;"| This statement compare variable '''mypassword '''and '''PASSWORD'''
+
  
 +
'''echo -e "\nWelcome" '''
  
if the value of variable '''mypassword '''matches with value of '''PASSWORD'''
+
'''else '''
  
The condition will be true and it will display '''Welcome '''on the screen
+
'''echo -e "\nWrong password" '''
 +
 
 +
'''fi'''
 +
| style="border:1pt solid #000000;padding:0.097cm;"| Here we have another set of '''if-else statements'''.
 +
 
 +
 
 +
 
 +
 
 +
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Highlight the first '''if'''
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| This set of '''if-else statements '''is nested within the first '''if statement'''.
 +
 
 +
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The second '''if '''statement compares variables '''mypassword '''and '''PASSWORD.'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''echo -e "\nWelcome"'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''echo -e "\nWelcome"'''
| style="border:1pt solid #000000;padding:0.097cm;"| This displays message''' Welcome '''on the terminal if password matches
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''echo''' displays the message''' “Welcome” '''on the '''terminal '''when the '''if condition '''is '''true;'''
  
'''-e '''enables interpretation of '''backslash escapes'''
+
i.e. the passwords match.
  
'''\n '''stands for new line.
+
'''-e '''enables interpretation of '''backslash escapes.'''
  
It ''means ''the string '''Welcome '''will be printed on the next line.
+
'''\n '''stands for new line;
 +
 
 +
which means the string '''Welcome” '''will be printed on a new line.
  
 
|-
 
|-
Line 170: Line 181:
  
  
| style="border:1pt solid #000000;padding:0.097cm;"| If the condition to match password is false, it will display
+
| style="border:1pt solid #000000;padding:0.097cm;"| When the '''if condition '''is not '''true, '''then the '''else condition '''will be executed;
 
+
'''Wrong password '''
+
 
+
on the screen
+
  
 +
i.e. when the passwords don't match, the '''else condition''' will be executed.
  
This displays message''' Wrong password'''
+
In this case, '''echo''' displays the message''' “Wrong password”'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi'''
| style="border:1pt solid #000000;padding:0.097cm;"| This ends the inner''' if loop'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi '''ends the inner''' if-else statement.'''
  
 
|-
 
|-
Line 187: Line 195:
  
 
'''echo "Wrong name"'''
 
'''echo "Wrong name"'''
| style="border:1pt solid #000000;padding:0.097cm;"| This statement is called if the condition to match name is false.
+
| style="border:1pt solid #000000;padding:0.097cm;"| Coming back to our first '''if-else statement.'''
  
It displays message''' Wrong Name'''
+
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.'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi'''
| style="border:1pt solid #000000;padding:0.097cm;"| This ends the outer''' if loop'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| This '''fi '''ends the outer''' if-else statement.'''
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| Switch to '''Terminal>> '''Type '''chmod +x nestedifelse.sh>> '''press '''Enter>> Type ./nestedifelse>> '''press '''Enter'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| Switch to '''Terminal>> '''Type '''chmod +x nestedifelse.sh>> '''press '''Enter'''
  
  
  
| style="border:1pt solid #000000;padding:0.097cm;"| Now switch to the''' terminal,''' to make it executable  
+
| style="border:1pt solid #000000;padding:0.097cm;"| Now switch to the''' terminal '''and make the file executable by typing -
  
type
+
'''chmod''' space''' plus x''' space''' nestedifelse.sh '''and press''' Enter.'''
  
'''chmod''' space''' plus x''' space''' nestedifelse.sh '''and press''' Enter'''
+
|-
 
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| '''Type ./nestedifelse>> '''press '''Enter'''
Now type '''dot slash nestedifelse.sh'''  
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now type '''dot slash nestedifelse.sh''' and press '''Enter.'''
 
+
and Press '''Enter'''
+
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"|  
 
| style="border:1pt solid #000000;padding:0.097cm;"|  
| style="border:1pt solid #000000;padding:0.097cm;"| The program verifies for two conditions
+
| style="border:1pt solid #000000;padding:0.097cm;"| The program verifies the two conditions
  
i.e.''' Name''' and '''Password'''
+
ie''' Name''' and '''Password'''
  
when it is executed on''' '''the '''terminal'''
+
when it is executed on''' '''the '''terminal.'''
  
 
|-
 
|-
Line 224: Line 232:
  
 
'''Enter Name:'''
 
'''Enter Name:'''
 +
| style="border:1pt solid #000000;padding:0.097cm;"| Here, the '''prompt''' displays “'''Enter Name:”'''
  
 +
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Type '''anusha'''
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us type '''anusha.'''
  
'''anusha'''
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| As this '''condition '''is '''true''', the next '''if condition '''will be evaluated.
  
 +
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| '''Password: '''
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now the '''prompt '''says''' “Password:”'''
  
'''Password: '''
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Type '''abc123'''
 +
| 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 the '''password''' as '''abc123'''
  
'''abc123'''
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The''' password '''matches with the value in the variable '''PASSWORD.'''
  
 +
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Highlight
  
 +
Output '''Welcome'''
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| So, the prompt displays the message “'''Welcome”.'''
  
| style="border:1pt solid #000000;padding:0.097cm;"| Here, the prompt displays
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now let us execute the '''script''' again.
  
'''Enter Name:'''
+
|-
 +
| style="border:1pt solid #000000;padding:0.176cm;"| Press '''up arrow key'''>> go to '''./nestedifelse.sh>>'''
  
Now let us enter
+
Press '''Enter'''
 +
| style="border:1pt solid #000000;padding:0.176cm;"| Press the up '''arrow key. '''
  
'''anusha'''
 
  
As condition is true, Next condition will be evaluated.
+
Go to B./'''nestedifelse.sh '''and press '''Enter'''
  
Now the prompt says''' '''
 
  
'''Password: '''
 
  
I will type password as '''abc123'''
 
  
As''' '''the''' '''password''' '''matches with already declared variable '''PASSWORD'''.
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"|
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| But this time we will enter the same name, but different password.
  
Prompt displays the message as
+
|-
 +
| style="border:1pt solid #000000;padding:0.097cm;"| '''Enter Name: anusha'''
  
'''Welcome'''
+
'''Password: 123'''
 +
| style="border:1pt solid #000000;padding:0.097cm;"| So I will enter the name '''anusha '''and password as '''123.'''
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.176cm;"| Press '''up arrow key'''>> go to '''./nestedifelse.sh>>'''
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Highlight
  
Press '''Enter'''
+
Output '''Wrong password'''
| style="border:1pt solid #000000;padding:0.176cm;"| Now let us execute the script again.
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The '''name''' values will match but the '''password''' values won't.
  
Press the up '''arrow key. '''Go to
+
So, the message “'''Wrong password” '''will be displayed.
  
./'''nestedifelse.sh '''and press '''Enter'''
+
This proves that the '''nested else statement '''within the first '''if statement''' was executed.
 
+
 
+
But this time we will enter same name, but wrong password.
+
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| Highlight
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Highlight
  
 
Output
 
Output
  
'''Enter Name: >>'''type '''swathi>> Press Enter'''
+
'''Enter Name: >>'''type '''swati>> Press Enter'''
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let's execute the script once more.
  
 +
This time we will give the name as '''swati '''and press''' Enter.'''
  
 +
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Highlight Output '''Wrong name'''
  
| style="border:1pt solid #000000;padding:0.097cm;"| Now I will enter the name
 
  
'''swathi '''and Press''' enter'''
+
Highlight '''swati'''
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The message “'''Wrong name” '''is displayed.
  
'''It is displayed'''
+
This is because the name '''swati''' does not match the previously declared value '''anusha.'''
  
'''Wrong name'''
+
|-
 
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|
As name enter '''swathi '''will not match the previously declared value '''anusha.'''
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The control comes out of the first '''if statement '''and executes the '''else statement.'''
 
+
The control comes out of if loop and prints
+
 
+
the else statement which is
+
 
+
 
+
'''Wrong name'''
+
  
 +
This prints the message “'''Wrong name”.'''
  
 +
'''<nowiki><PAUSE></nowiki>'''
  
 +
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now let us look at '''multilevel if-else statement.'''
  
 
|-
 
|-
Line 305: Line 333:
  
 
'''<nowiki><</nowiki>Flow graph>'''
 
'''<nowiki><</nowiki>Flow graph>'''
| style="border:1pt solid #000000;padding:0.097cm;"| if''' condition1''' is true then''' statement1''' is executed
+
| style="border:1pt solid #000000;padding:0.097cm;"| if''' condition1''' is '''true, '''then''' statement1''' is executed.
  
If''' condition1''' is false''' condition 2''' is executed
+
If''' condition1''' is '''false, '''then''' condition 2''' is evaluated.
  
if''' condition2''' is true then''' statement 2''' is executed  
+
if''' condition2''' is '''true, '''then''' statement 2''' is executed .
  
And if''' condition 2''' is false then''' condition N''' is evaluated.
+
And if''' condition 2''' is '''false, '''then''' condition N''' is evaluated.
  
If''' condition N''' is true then''' statement N''' is executed  
+
If''' condition N''' is '''true,''' then''' statement N''' is executed.
  
And if''' Condition N''' is false then''' statement X''' is executed.
+
And if''' Condition N''' is '''false,''' then''' statement X''' is executed.
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| On '''Terminal>> Type gedit multilevel-iflese.sh>> '''Press''' enter'''
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
| style="border:1pt solid #000000;padding:0.097cm;"| Lets look at an example.
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let's look at an example.
  
I have a working example of this code.
+
|-
 +
| style="border:1pt solid #000000;padding:0.097cm;"| On '''Terminal>> Type gedit multilevel.sh>> '''Press''' enter'''
 +
| style="border:1pt solid #000000;padding:0.097cm;"| I have a working example of this code.
  
I will open the file''' multilevel.sh '''using the command prompt.
+
I will open the file''' multilevel.sh''' using the command  
  
Come back to our terminal
+
'''gedit multilevel.sh'''
 
+
type:
+
 
+
'''gedit multilevel-ifelse.sh &'''
+
 
+
Press''' Enter'''
+
 
+
Now type the code as shown here in your''' multilevel.sh '''file
+
  
 
|-
 
|-
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
 
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| This program illustrates whether the entered string is Empty'''.'''
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let me explain the code now.
 
+
Or it will check whether it has words '''raj '''or '''jit''' in it'''.'''
+
  
 
|-
 
|-
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''<nowiki>#!/bin/bash</nowiki>'''
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let me explain the code now
+
| style="border:1pt solid #000000;padding:0.097cm;"| This is the''' shebang line.'''
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| '''<nowiki>#!/</nowiki>bin/bash'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''read -p "Enter a Word : " mystring'''
 +
| style="border:1pt solid #000000;padding:0.097cm;"| The''' read command''' reads''' one line''' of data from''' standard input.'''
  
 +
'''-p''' display the '''prompt'''
  
 
+
'''string''' is a''' variable''' which stores the word input by user during execution'''.'''
| style="border:1pt solid #000000;padding:0.097cm;"| This is first line of''' bash shell''' script known as''' shebang line'''
+
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| '''read -p "Enter a word : " string'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''<nowiki>if [ -z "$</nowiki>mystring" ]; then'''
| style="border:1pt solid #000000;padding:0.097cm;"| The''' read command''' reads''' one line''' of data from''' standard input. '''
+
  
'''-p''' display the prompt with string '''“Enter a word”'''
 
  
'''string''' is a''' variable''' which stores the word entered by user during execution'''.'''
 
  
|-
+
| style="border:1pt solid #000000;padding:0.097cm;"| The '''if condition '''checks whether''' '''input string is '''null.'''
| style="border:1pt solid #000000;padding:0.097cm;"| '''if<nowiki> [ -</nowiki>z "$string" ]; then'''
+
  
 +
'''-z '''checks whether length of '''string''' is '''zero.'''
  
'''echo " Nothing is Entered "'''
+
Type '''man test '''on''' terminal '''and explore various '''string '''Or option? Which one are u intending?comparison.
| style="border:1pt solid #000000;padding:0.097cm;"| '''-z '''checks whether the variable '''string '''is empty
+
  
Type '''man test '''on''' terminal '''and explore different string comparison.
+
|-
 
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| '''echo " 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;"| This '''echo statement '''will be printed, if nothing is entered.
This statement will be printed if nothing was entered.
+
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| '''elif<nowiki> [[ "$</nowiki>string" == *"raj"* ]]; then'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''<nowiki>elif [[ "$</nowiki>mystring" == *"raj"* ]]; then'''
  
'''echo "\”$string\” contains word raj"'''
+
'''echo "$mystring contains word raj"'''
| style="border:1pt solid #000000;padding:0.097cm;"| Checks whether''' entered string''' ''contains the word''' r''aj'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The first '''elsif condition '''checks whether''' '''the''' input string''' contains the word''' raj.'''
  
If yes, it displays message as''' $string '''c''ontains the word''' ''raj'''
+
If it does, then this '''echo statement '''will be printed.
 +
 
 +
The '''wildcard Pls check if this is correct.'''character '''ensures that any word with''' raj '''in it, will be identified.
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| '''elif<nowiki> [[ $</nowiki>string = *"jit"* ]]; then'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''<nowiki>elif [[ $</nowiki>mystring = *"jit"* ]]; then'''
  
'''echo "\”$string\” contains word jit"'''
+
'''echo "$mystring contains word jit"'''
| style="border:1pt solid #000000;padding:0.097cm;"| Checks whether''' entered string''' ''contains the word'' '''jit'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The next '''elsif condition '''checks whether the''' input string''' contains the word '''jit.'''
  
If yes, it displays message as''' $string contains word jit'''
+
If it does, then this '''echo statement '''will be printed.
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''else'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''else'''
  
'''echo "Sorry! entered word does not contain either raj or jit"'''
+
'''echo "Sorry! Entered Word does not contain raj or jit"'''
| style="border:1pt solid #000000;padding:0.097cm;"| If the entered string does not contain either '''raj '''or '''jit'''  
+
| style="border:1pt solid #000000;padding:0.097cm;"| The '''else condition '''will be executed when all the above '''conditions''' fail.
  
Then it displays ''the message''
+
And it will display the message '''Sorry! Input does not contain raj or jit”'''
 
+
'''Sorry! entered word does not contain either raj or jit'''
+
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi'''
 
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi'''
| style="border:1pt solid #000000;padding:0.097cm;"| End of''' multilevel if-else''' loop
+
| style="border:1pt solid #000000;padding:0.097cm;"| '''fi''' indicates the end of''' multilevel if-else''' '''statement.'''
  
Let us execute the program
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us now execute the program.
  
 
|-
 
|-
Line 408: Line 426:
  
  
'''>> Type chmod +x multilevel-ifesle.sh>> Press Enter'''
+
'''>> Type chmod +x multilevel.sh>> Press Enter'''
 +
| style="border:1pt solid #000000;padding:0.097cm;"| Switch to the '''terminal.'''
  
'''>> Type ./multilevel-ifelse.sh>> Press enter'''
+
First make the file executable by typing:''' '''
| style="border:1pt solid #000000;padding:0.097cm;"| Switch to the terminal
+
  
First make the file executable
+
'''ch mod space plus x space multilevel.sh '''
  
type:''' chmod''' space''' plus x''' space''' multilevel-ifelse.sh '''
 
  
Now type '''dot slash''' '''multilevel-ifelse.sh '''and Press''' Enter'''
 
  
We are prompted for an input.
 
  
 
|-
 
|-
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|  
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Type''' ./multilevel.sh>> '''Press''' Enter'''
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us understand with different inputs and see what happens each time.
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now type '''dot slash''' '''multilevel.sh'''
  
 
|-
 
|-
| style="border:1pt solid #000000;padding:0.097cm;"| Highlight
+
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| '''Enter a Word:'''
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| We are prompted for an input.
  
The output
+
Let us give different inputs and see what happens each time.
  
 +
|-
 +
| style="border:1pt solid #000000;padding:0.097cm;"| '''Enter a Word:'''
  
'''Enter a Word:'''
 
  
  
'''echo " Nothing was entered"'''
+
| 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.  
+
The first '''if condition '''in the '''multilevel if-else''' is satisfied.  
  
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;"| 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 is Entered” '''is displayed.''' '''
  
And Control comes out of '''Multilevel if-else loop.'''
+
And the control comes out of the '''Multilevel if-else statement.'''
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| <center>Go to '''./multilevel.sh '''by Pressing''' up arrow key>> '''Press '''Enter'''</center>
 
| style="border:1pt solid #000000;padding:0.097cm;"| <center>Go to '''./multilevel.sh '''by Pressing''' up arrow key>> '''Press '''Enter'''</center>
 +
| style="border:1pt solid #000000;padding:0.097cm;"| Now let us try executing the script with a different input.
  
 +
Press '''up arrow key.'''
  
Highlight
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| '''Enter a Word:'''
 +
| 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:”'''
  
'''Type:'''
+
|-
 +
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| 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 '''abijit.'''
  
'''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;"| The output displayed is '''“abijit contains word jit”.'''
  
 +
This shows that the control flowed to the third '''condition''' in our code.
  
'''“abijit” contains word 'jit'.'''
+
The first two '''conditions''' did not match.
 
+
 
+
'''<nowiki>elif [[ $string = *"jit"* ]]; then </nowiki>'''
+
 
+
 
+
 
+
| style="border:1pt solid #000000;padding:0.097cm;"| Now let us try executing the script with different input.
+
 
+
Press '''up arrow key'''
+
 
+
The prompt displays as '''Enter a word:'''
+
 
+
I will type
+
 
+
'''abijit '''
+
 
+
The output is:
+
 
+
'''“abijit” contains word 'jit'.'''
+
 
+
This shows that the control flows to third condition in our code.
+
 
+
The first two condition did not match.
+
  
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"|  
 
| style="border:1pt solid #000000;padding:0.097cm;"|  
| style="border:1pt solid #000000;padding:0.097cm;"| The same logic is applicable for all '''conditions.'''
+
| style="border:1pt solid #000000;padding:0.097cm;"| The same logic is applicable for all the '''conditions.'''
  
Try executing the program with different inputs and check their results.
+
Try executing the program with different inputs and check the results.
  
 
|-
 
|-
Line 493: Line 497:
 
In this tutorial we learnt, the usage of
 
In this tutorial we learnt, the usage of
  
* '''Nested If-else '''in a script which verifies '''Name''' and''' Password '''of a user
+
* '''Nested If-else '''with''' Name''' and''' Password verification''' program.
  
We also saw usage of
+
* M'''ultilevel if-else '''with '''String comparison''' program.
 
+
* '''Multilevel if-else '''in a script with does a '''String comparison'''
+
  
  
Line 505: Line 507:
  
 
Assignment
 
Assignment
| style="border:1pt solid #000000;padding:0.097cm;"| # As an assignment, write a program to output different messages when number is
+
| style="border:1pt solid #000000;padding:0.097cm;"| Write a program to output different messages:
 
+
* greater than 3,
+
* lesser than 3
+
* or equal to 3
+
 
+
and if the
+
  
* user input is empty
+
1) When number is greater than 3
  
 +
2) Lesser than 3
  
 +
3) Equal to 3 or when user input is empty.
  
 
|-
 
|-
Line 555: Line 553:
 
|-
 
|-
 
| style="border:1pt solid #000000;padding:0.097cm;"| Display Slide 12
 
| style="border:1pt solid #000000;padding:0.097cm;"| Display Slide 12
| style="border:1pt solid #000000;padding:0.097cm;"| The script has been contributed by Lavitha Pereira
+
| style="border:1pt solid #000000;padding:0.097cm;"| The script has been contributed by FOSSEE and Spoken Tutorial Team.
  
  

Revision as of 17:36, 30 September 2013

Title of script: More on if loop in Bash Shell scripting

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 a nestedif code in the file nestedifelse.sh

So, I will go to Terminal and type gedit nestedifelse.sh

Press Enter.

Let me explain the code now.
#!/bin/bash We already know that this is the first line of bash shell script - 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.

-p flag displays the prompt.

The string after -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,

-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 switch to the terminal and make the file executable by typing -

chmod space plus x space nestedifelse.sh and press Enter.

Type ./nestedifelse>> press Enter Now type dot slash nestedifelse.sh and press Enter.
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 B./nestedifelse.sh and 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 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 is executed.

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

I will open the file multilevel.sh using the command

gedit multilevel.sh

Let me explain the code now.
#!/bin/bash This is the shebang line.
read -p "Enter a Word : " mystring The read command reads one line of data from standard input.

-p display the prompt

string 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.

-z checks whether length of string is zero.

Type man test on terminal and explore various string Or option? Which one are u intending?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 elsif condition checks whether the input string contains the word raj.

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

The wildcard Pls check if this is correct.character ensures that any word with raj in it, will be identified.

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

echo "$mystring contains word jit"

The next elsif 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 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

Switch to the terminal.

First make the file executable by typing:

ch mod space plus x space multilevel.sh



Type ./multilevel.sh>> Press Enter Now 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.

The first if condition in the multilevel if-else is satisfied.

Output: " Nothing is Entered" The message “Nothing is 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
Now let us try executing the script with a different input.

Press up arrow key.

Enter a Word: The prompt displays “Enter a word:”
Type abhijit I will type abijit.
Output: “abijit contains word jit” The output displayed is “abijit 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

In this tutorial we learnt, the usage of

  • Nested If-else with Name and Password verification program.
  • Multilevel if-else with String comparison program.


Display Slide 8

Assignment

Write a program to output different messages:

1) When number is greater than 3

2) Lesser than 3

3) Equal to 3 or when 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