Generally, bash commands are executed regularly. So running complex or multiple commands one by one is difficult. Or sometimes we just want to accomplish tasks with just one command without diving into it and distribute this command. Here are functions to make things very easy. Functions get parameters and execute functions code. A function has two ways to create. Here is syntax. Prefer the second one because portability is important.
function function_name {
function_body
}
function_name () {
function_body
}
Define Bash Function
Let’s create a function that creates a folder according to parameters.
function test {
echo "Hello";
echo "poftut.com";
}
As you see we used ; to make things more clear but omitting them do not hurts our code. Save this code as text file named test.sh .
Passing Arguments or Parameters To Function
Sometimes functions need parameters to use inside. Using parameters in function is very easy just to put parameters between parenthesis and make a function call. Inside function block use $1, $2, $3, … which is the parameter row numbers.
function getParameters(){
echo $1;
echo $2;
echo $3;
}
And call the function named getParameters with parameters.
$ . ./bash_function.sh
$ getParameters p1 p2 p3

As you see that at the first run we provided three parameters to the function and all of them printed but at the second run we only provided two parameters and the third parameter is printed as empty because it is not defined in function do echo $3; printed as an empty line.
Return Values From Functions
In previous examples, we have simply called the functions and run some statements in these functions like printf etc. The real power of function comes from its modularity. We can call a function and simply return some data. This is a better way because we can use function results in different formats. We can use echo statement in a function to end function and return given data to the caller. In this example, we will create a function named mycat
which will concatenate given two strings and return the result.
function mycat(){
echo "$1 $2"
}
Variable Scope
In bash a variable can be accessed from every where in the current session. This means each variable is by default global. A variable defined outside of the function can be accessed from inside function. This may create problems if we have same name variables in different scopes.
Local Variables
We can define variables inside function to make them only accessible from inside a function. This will also prevent collusion of same named variables inside and outside of the function. We can use local
keyword to make variables local. In this example we will create variables named age
outside and inside a function. We will set inside function age
as local.
age=40
function pr(){
local age=20
echo $age
}
pr
echo $age

As we from output first age
variable inside function will print 20
and than outside function age
variable prints 40
. If we remove the local
from age variables we will get 20 for both variable prints.
Source Code Blocks
Sourcing is a term used in bash that means specified bash script file is important in to current bash session. Thinks that you have implemented some function in a bash file and want to use them in current bash session only. We use syntax below where test.sh is the file that contains bash code to import and . is the operator used to import bash file.
$ . test.sh
$ getHostname
lenovo.localhost