Unix
In this tutorial we will learn about functions in Shell Programming.
A function is a block of code written for a specific task.
For example, a simple interest function will have code to compute the simple interest based on some input data.
Functions in Shell are similar to subroutines or procedures in other programming language like C.
Following is the syntax of a function.
function functionName() { # some code goes here... }
Where functionName is the name of the function. After the name we have the opening and closing parenthesis ().
functionName
()
The body of the function starts from { and ends at }.
{
}
Inside the opening and closing curly brackets {} we have the body of the function.
{}
Another way of creating a function is given below.
functionName() { # body of the function }
We follow the given rules when naming functions.
In the following example we are creating greetings function.
greetings
#!/bin/sh # create a function function greetings() { echo "Hello World" } # call the function greetings
Output:
$ sh example01.sh Hello World
We can also pass arguments to a function in shell script and access them using variables like $1, $2, $3... where, $1 points at the first argument, $2 points at the second argument and so on.
In the following example we are creating greetings function which accepts an argument and prints a greetings message.
#!/bin/sh # create a function greetings() { echo "Hello $1" } # call the function greetings "Yusuf Shakeel"
$ sh example02.sh Hello Yusuf Shakeel
In this example we will first take the name from the user and save it in variable name.
name
#!/bin/sh # function greetings() { echo "Hello $1" } # take user name printf "Enter your name: " read name # call the function greetings "$name"
$ sh example03.sh Enter your name: Yusuf Shakeel Hello Yusuf Shakeel
We use the return command to return value from a function.
return
For this we will create square function which will take a number as argument.
square
#!/bin/sh # function square() { # if argument missing if [ -z "$1" ] then return 1 # return error code fi # assign argument to variable n n="$1" # find square result=`expr "$n * $n" | bc -l` return 0 # return success code } # take user input printf "Enter a number: " read num # call the function square "$num" # save the returned code from the above function call returnCode=$? if [ $returnCode -eq 0 ] then # display the result printf "Square of %d = %d\n" "$num" "$result" elif [ $returnCode -eq 1 ] then printf "Error Code: $returnCode Error: Number missing!\n" else printf "Error Code: $returnCode Error: Unknown!\n" fi
$ sh example04.sh Enter a number: 5 Square of 5 = 25 $ sh example04.sh Enter a number: Error Code: 1 Error: Number missing!
Value returned by the function is accessed using $? so, we use it to save the returned value in variable $returnCode.
$?
$returnCode
Note! The variable result inside the square function is accessible from outside the function inside the script file.
result
So, result variable is like a global variable even though it is inside the square function. This is different from what we know from other programming languages like C, C++, Java etc. were a variable defined inside a function can't be accessed from outside directly.
#!/bin/sh # simple interest function simpleInterest () { p="$1" r="$2" t="$3" si=`expr "($p * $r * $t)/100" | bc -l` } # take user input printf "Enter Principal: " read pr printf "Enter Rate [0-100]: " read rt printf "Enter Time [in years]: " read tm # call function simpleInterest $pr $rt $tm printf "Simple Interest: %.3f\n" "$si"
$ sh example05.sh Enter Principal: 100 Enter Rate [0-100]: 10 Enter Time [in years]: 2 Simple Interest: 20.000