my_func() {
	echo "my function is working"
}
myfunc
  • the similar to python, with (), but there is no ;, and the function need to start with {}
  • it can also be defined as function myfunc() {}
  • to call a function, write out the function, but without the ()
    Important: function name CANNOT be a built-in function eg. time, date, ls

Function with Variables

my_func() {
        echo "scale=4; $1/$2+($3-$4)" | bc
        for i in $*; do echo "$i-0.5" |bc ; done
}
my_func 1 4 1 0.667 5# 0.5830
# also echo out all the input and minux by -0.5
  • $1,2,3 indicates positional arguments and are ordered
  • if there are more arguments in a function that parameters these arguments will be ignored
  • however, $* consists of all the arguments that is passed into the function

Function Return

my_func() {
    echo $(( $1+10 ))
}
my_func 10 # returns 20
[ $(my_func 20) == 30 ] && echo "return 30" || echo "return not 30"
  • using echo will return the output of the function for further testing
  • for functions, it’s different than variable, if it returns something, it needs to be enclosed in $() when trying to evaluate with test function
    Another way using exit code
new_func() {
	return 20
}
new_func; echo $?
  • return is only used for exit codes not returning values

Command Line
A bash function can be sourced

source myscript.sh
my_func args
./myscript.sh func1 args
  • after it’s sourced, the functions are available to use in command line
    Using "$@" after a function allow the function to be called in the cli with arguments