Chapter 9. Working with Functions

In the last chapter, you learned about using decision making in scripts by working with test, if-else, and switch case. We also used select for loop with menu. For repeated tasks, such as processing lists, you learned to use the for and while loops and the do while. You also learned about how to control loops using the break and continue statements.

In this chapter, you will learn the following topics:

  • Writing a new function and calling
  • Sharing data between functions
  • Passing parameters to functions
  • Creating a library of functions

Understanding functions

We, human beings, in our day-to day lives, take help from people, who are specialized in certain knowledge or skills, such as doctors, lawyers, and barbers. This helps our lives to be more organized and comfortable so that we need not learn every skill in this world. We take advantage of skills that have already been acquired by other people. The same thing applies to software development as well. If we use whatever code or scripts that have already been developed, then this will save our time and energy.

In real-world scripts, we break down big tasks or scripts into smaller logical tasks. This modularization of scripts helps in the better development and understanding of code. The smaller logical blocks of script are be called functions.

The advantages of functions are as follows:

  • If the script is very big, then understanding it becomes very difficult. Using functions, we can easily understand complex script through logical blocks or functions.
  • When a big and complex script is divided into functions, then it becomes easy to develop and test the script.
  • If a certain part of code is repeated again and again in the big script, then using functions to replace repetitive code is very practical, such as checking whether the file or directory is present or not.
  • We define functions for specific tasks or activities. Such functions can be called as commands in scripts.

Functions can be defined on a command line or inside scripts. The syntax for defining functions on a command line is as follows:

functionName { command_1; command_2; . . . }

Or:

functionName() { command_1; command_2; . . }

In single-line functions, every command should end with a semicolon.

Let's write a very simple function to illustrate the preceding syntax:

$ hello() {echo 'Hello world!';}

We can use the previously defined function as follows:

$ hello

Output:

Hello world!

The syntax of the function declaration inside the Shell script is as follows:

function_name() {
   block of code
}

An alternate function syntax is mentioned here:

function function_name
{
   block of code
}

Functions should be defined at the beginning of a script.

We can add this function in the Shell script function_01.sh as follows:

#!/bin/bash
hello()
{echo "Executing function hello"
}
echo "Script has started now"
hello
echo "Script will end"

Test the script as follows:

$ chmod +x function_01.sh
$ ./function_01.sh

Output:

Script has started now
Executing function hello
Script will end

We can modify the preceding script into function_02.sh with some more functionality, shown as follows:

#!/bin/bash
function greet()
{ echo "Hello $LOGNAME, today is $(date)"; }
greet

Test the script as follows:

$ chmod +x function_02.sh
$ ./function_02.sh

Output:

Hello ganesh, today is Sun Jul  5 22:47:23 PDT 2015

The system init functions are placed in the /lib/lsb/init-functions folder in the Linux operating system:

The script function_03.sh with a function for listing the present working directory and listing all the files in the current directory is as follows:

#!/bin/bash
function_lister ()
{
   echo Your present working directory is `pwd`
   echo Your files are:
   ls
}
function_lister

Test the script as follows:

$ chmod +x function_03.sh
$ ./function_03.sh

Output:

Your present working directory is /home/student/Desktop/test
Your files are:
01.sh  02.sh  03.sh

The script function_04.sh with a function to pause the script until users press any key is as follows:

#!/bin/bash
# pause: causes a script to take a break
pause()
{
echo "To continue, hit RETURN."
read q
}
pause

Test the script as follows:

$ chmod +x function_04.sh
$ ./function_04.sh

Output:

To continue,   hit  RETURN.
(after hitting any key it resumes)

The script function_05.sh with a function to print the previous day is as follows:

#!/bin/bash
yesterday()
{
date --date='1 day ago'
}
yesterday

Test the script as follows:

$ chmod +x function_05.sh
$ ./function_05.sh

Output:

Sat Jul  4 22:52:24 PDT 2015

The function to convert lowercase letters into uppercase letters is shown in function_06.sh as follows:

#!/bin/bash
function Convert_Upper()
{
echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 
               'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
}
Convert_Upper "ganesh naik - embedded android and linux training"

Test the script as follows:

$ chmod +x function_06.sh
$ ./function_06.sh

Output:

GANESH NAIK - EMBEDDED ANDROID AND LINUX TRAINING

Displaying functions

If you want to see all the declared functions in the shell environment, then enter the following command:

$ declare -f

If you want to see a particular function, then here is the command:

$ declare -f hello

Output:

hello ()
{
    echo 'Hello world!'
}

Removing functions

If we no longer need the function in shell, then we use following command:

$ unset -f hello
$ declare -f# Check the function in shell environment.

Output:

Nothing will be displayed on the screen, as the function hello is removed from the shell environment with the unset command.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset