Bash Shell Script Function Examples

by on January 27, 2009 · 6 comments· LAST UPDATED October 27, 2009

in , ,

How do I create a shell script function using Bash under UNIX / Linux operating systems?

Functions are nothing but small subroutines or subscripts within a Bash shell script. You need touse to break up a complex script into separate tasks. This improves overall script readability and ease of use. However, shell function cannot return value. They return a status code.

Declare Shell Function

All functions must be declared before they can be used. The syntax is:

function name(){
  Commands
}

OR

 
name(){
 Commands
 return $TRUE
}

You can call function by typing its name:

 
name

Example

Create a shell script called file.sh:

#!/bin/bash
# file.sh: a sample shell script to demonstrate the concept of Bash shell functions
# define usage function
usage(){
	echo "Usage: $0 filename"
	exit 1
}
 
# define is_file_exits function 
# $f -> store argument passed to the script
is_file_exits(){
	local f="$1"
	[[ -f "$f" ]] && return 0 || return 1
}
# invoke  usage
# call usage() function if filename not supplied
[[ $# -eq 0 ]] && usage
 
# Invoke is_file_exits
if ( is_file_exits "$1" )
then
 echo "File found"
else
 echo "File not found"
fi
 

Run it as follows:
chmod +x file.sh
./file.sh
./file.sh /etc/resolv.conf

Task: Export functions

You need to use export command:

 
fname(){
  echo "Foo"
}
 
export -f fname

Task: Make readonly functions

You create functions at the top of the script and set the readonly attribute with the readonly command:

 
fname(){
  echo "Foo"
}
 
usage(){
  echo "Usage: $0 foo bar"
  exit 1
}
 
readonly -f usage
readonly -f fname

Task: Local variables functions

Use the local command to create local variables:

#!/bin/bash
# gloabal x and y
x=200
y=100
 
math(){
  # local variable x and y with passed args	
  local x=$1
  local y=$2
  echo $(( $x + $y ))
}
 
echo "x: $x and y: $y"
# call function 
 
echo "Calling math() with x: $x and y: $y"
math 5 10
 
# x and y are not modified by math()
echo "x: $x and y: $y after calling math()"
echo $(( $x + $y ))

Task: Recursion

A recursive function call itself. Recursion is a useful technique for simplifying some complex algorithms, and breaking down complex problems.

 
#!/bin/bash
foo(){
  # do something
  # if not false call foo
  foo
}
 
# call foo
foo

See Recursive function for more details.

Recommend readings:

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 6 comments… read them below or add one }

1 shweta October 26, 2012 at 7:34 am
fun1(){ x=100000;  echo " In fun() x = $x " ; }
fun2(){ y=200000;  echo " In fun() y = $y " ; }
x=100 ; y=200
echo "before calling d fun1() x=$x"
echo -e $(fun1)
echo " after calling d fun1() x=$x"
echo "before calling d fun2() y=$y"
fun2
echo " after calling d fun() y=$y"

output :

before calling d fun1() x=100
In fun() x = 100000
 after calling d fun1() x=100
before calling d fun2() y=200
 In fun() y = 200000
 after calling d fun() y=200000

I m a beginner in Shell programing…., anybody can explain me what is the diff. b/w calling a function as $(fun) or fun….., why the value of x is not changed n value of is changed… what is diff. b/w both invocation.

Reply

2 unop December 23, 2012 at 5:07 am

@shweta

$(command) – causes the command to be run in a subshell (child process of the parent) and any changes made in the subshell do not affect the parent execution context. See the section COMMAND EXECUTION ENVIRONMENT in the bash manpage.

e.g.
x=1; echo “before x=$x”; echo “$x” | while read x; do echo “during x=$x”; ((x++)); echo “during x=$x”; done; echo “after x=$x”
before x=1
during x=1
during x=2
after x=1

x=1; echo “before x=$x”; ( x=2; echo “during x=$x”; ); echo “after x=$x”
before x=1
during x=2
after x=1

Reply

3 unop December 23, 2012 at 5:09 am

BTW,

commands should be defined (as per `help function’) using one of the following syntaxes

function funcname { … }
or
funcname() { … }

definitely not
function funcname() { … }

Reply

4 Newbie March 3, 2013 at 12:19 am

Hi,

Thanks sir, this is explicated in detail and simply, you learn me function with bash :)

Have a good time

Reply

5 Jordan May 3, 2013 at 2:59 pm

Thanks!
So helpfull as usually…

Reply

6 Ting July 2, 2013 at 1:55 pm

Can’t functions take in variable? As $1… .

Reply

Leave a Comment

Tagged as: , , , , , , , , , , , , , , ,

Previous Faq:

Next Faq: