定义函数的两种方式:

方式一:

function  fun_name  {        #注意括号和名称之间的空格

        command

}

方式二:

fun_name () {

        command

}

注意:使用函数必须在定义之后,否者会报错,重名的函数会被后者覆盖但不报错。

使用函数时直接写出名称就可以:例:fun_name


函数的返回值:

默认可以用 $? 获取函数中最后一条命令的状态码

也可以用return命令返回状态码

function fun_name  {

        return 0

}

注意:这个返回状态码必须是0-255


使用函数输出:

function fun_name  {

        read  -p "Enter a value" value

        echo  $[  $value * 2  ]

}

reault=$(fun_name)        #可以用这种方法获取函数的输出

注意:使用read命令的-p提示文字这段并不会输出在result中,只有用echo命令时才会在result中获取到输出


在函数中使用变量:

在函数中使用参数,可以将函数看做一个小型的脚本,$0代表函数名,$1,$是函数的参数。

function  fun_name {

        echo $[  $1 * $2  ]

}

给函数传参并获取值:value=$(fun_name10  20)

要想在脚本中给函数传参就得手动传入,例:value=$( fun_name  $1  $2 )


全局变量:

默认情况下在脚本中定义的变量都是全局变量,在函数中可以使用,并会影响到全局的值。

function fun_name  {

        value=$[  $value + 6  ]

}

value=5

fun_name

echo $value        #此时的值为11


局部变量:

只要在函数中使用的变量名前加上local关键字就可以定义局部变量

function  fun_name  {

        local  temp=$[  $value + 5  ]

}

在这个例子中value任然是全局变量,temp则为局部变量


传递数组参数:

函数会将数组每个元素当成单独的参数,所以在函数中必须重建数组。

function fun_name  {

        local array

        array=($(echo "$@"))        #重建数组

        echo "${array[*]}"

}

var=(1 2 3 4 5)

fun_name ${var[*]}


从函数返回数组:

函数只是返回一窜单个的值,要想得到数组必须要将返回值重建数组

例:

function fun_name {

        local array

        array=($(echo "$@"))

        length=$#

        for (( a = 0 ;a < $length; a++))

        do

                array[$a]=$[ ${array[$a]} + 3 ]

        done

        echo ${array[*]}

}

var=(1 2 3 4 5)

variable=($(fun_name ${var[*]}))

echo ${variable[*]}

例子中演示了将一个数组的值每个元素都加上3然后返回,再将值重建为数组


函数递归:

自己调用自己

例:计算一个数的阶乘

function  fun_name  {

        if [  $1 -eq  1  ] ; then

                echo 1

        else

                local  temp=$[  $1  -  1  ]

                local  result=$(fun_name  $temp)

                echo  $[  $result  *  $1  ]

        fi

}

fun_name  5


创建库:

source  filepath  或  .  filepath        注意在filepath前有个点

例1:source  ./demo.sh   导入库文件

例2:.  ./demo.sh             导入库文件,前面有个点和空格


在命令行上使用函数:

可以直接在命令行上定义函数,单行用分号分格,多行回车即可,然后就可以在整个系统中使用了,退出shell函数就会消失。

例1:

function fun_name { echo $[  $1 /  $2 ] }

fun_name  6  2

例2:

function fun_name {

> echo $[ $1 / $2 ]

> }

fun_name 6 2


在.bashrc中定义函数:

可以直接在.bashrc中定义函数,也可以将写好的函数库用source引入到该文件中。这样就可以在子shell、命令行、脚本中等任何地方自己使用了。

例:

# Source global definitions

if [ -f /etc/bashrc ]; then

        . /etc/bashrc

fi

function fun_name {            #定义函数

        echo $[ $1 * $2 ]

}

source  /home/bin/func.sh        #引入库到.bashrc中


shtool函数库安装与使用:

下载:ftp://ftp.gnu.org/gnu/shtool/shtool-2.0.8.tar.gz

解压:tar -zxvf shtool-2.0.8.tar.gz

安装:

./configure        检查所需的软件并修改配置文件

make

make install

使用:

shtool [options] [function [options] [args]]        shtool函数的使用格式

例:shtool  platform