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
🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.
🐧 9 comments so far... add one ↓
🐧 9 comments so far... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
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.
@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
BTW,
commands should be defined (as per `help function’) using one of the following syntaxes
function funcname { … }
or
funcname() { … }
definitely not
function funcname() { … }
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…
Can’t functions take in variable? As $1… .
Hello, i seem to be having this issue whenever i try to do bash on centos. I don’t know why as my bash is /bin/bash and ive tried it on many new installs in this code… i used the code from this section: Task: Local variables functions.
[root@SERVER01 /]# sh install.sh
:command not found
`nstall.sh: line 6: syntax error near expected token `{
`nstall.sh: line 6: `math(){
Its really annoying.. i always get :command not found with any new lines… and functions always create an error aswell… why is this?
Thanks
Lewis
how can I pass the argument to the loop? I have the following code:
then I execute
./GPM_download.sh 2014 2014 05 05 27 27 Ka
but the created file .netrc looks like this
not as I wish “cd /gpmdata/20140527/radar”
How we written commands to run any function in command prompt