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:- Chapter 9: Functions from the Linux shell scripting wiki
You should follow me on twitter here or grab rss feed to keep track of new changes.
Featured Articles:
- 30 Handy Bash Shell Aliases For Linux / Unix / Mac OS X
- Top 30 Nmap Command Examples For Sys/Network Admins
- 25 PHP Security Best Practices For Sys Admins
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- Linux: 20 Iptables Examples For New SysAdmins
- Top 20 OpenSSH Server Best Security Practices
- Top 20 Nginx WebServer Best Security Practices
- 20 Examples: Make Sure Unix / Linux Configuration Files Are Free From Syntax Errors
- 15 Greatest Open Source Terminal Applications Of 2012

- My 10 UNIX Command Line Mistakes
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- The Novice Guide To Buying A Linux Laptop













{ 3 comments… read them below or add one }
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 :
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.
Hi,
Thanks sir, this is explicated in detail and simply, you learn me function with bash :)
Have a good time
Thanks!
So helpfull as usually…