什么是函数?

1)函数基础概念

       函数:function ,指把一段独立功能的代码当作一个整体并为之取一个名字,即命名的代码段,也即函数;

       函数是过程式编程中实现代码重用的重要组件,也即实现模块化编程和结构化编程的重要组件;

       函数代码段在定义时不会自动执行,在调用时才会自动执行;调用函数,即在代码中给定函数名,在代码执行时会在函数名出现的位置执行该函数名代表的函数代码段;

       函数命名与变量命名法则类似,尽量不要与系统命令同名;

       函数的生命周期:被调用时创建,返回时(即函数执行完了时)终止;

       函数状态返回值为函数体中运行的最后一条命令的状态返回值,与脚本一样这样的状态返回值并不理想,因此有时需要自定义函数状态返回值;自定义函数状态返回值使用return命令,函数体中任何位置出现return函数终止:

           return [0-255]

       0: 成功

       1-255: 失败

  2)函数的定义

       格式一:

           function  f_name  {

        ...函数体...

         格式二:

           f_name()  {

                ...函数体...

           }

  (3)函数返回值

       ①函数的执行结果返回值

         1>使用echo或printf命令输出;

           printf不会换行输出但是可以格式化输出;

         2>函数体中调用的命令的执行结果;

       ②函数的执行状态返回值(即退出状态码)

         1>默认取决于函数体中执行的最后一条命令的退出状态码;

         2>自定义:使用return命令;


  4)函数参数

       在函数体中可以使用$1,$2, ...引用传递给函数的参数;还可以在函数中使用$*或$@引用传递给函数的所有参数,使用$#引用传递给函数的参数个数;

       在调用函数时,在函数名后面以空白符分隔给定参数列表即可,例如,testfunc  arg1 arg2 arg3 ...

  (5)变量作用域:

    局部变量:作用域是函数的生命周期;

        定义局部变量的方法:local VARIABLE=VALUE

                     本地变量:作用域是当前shell脚本的生命周期;

  (6)函数递归:函数直接或间接调用自身;

     ①阶乘:n!=n*(n-1)!=n*(n-1)*(n-2)!=...

#/bin/bash
#
fact () {
if [ $1 -eq 1 -o $1 -eq 0 ];then
    echo 1
else 
    echo "$[$1*$(fact $[$1-1])]"
fi
}
fact $1

                 ②斐波那契数列:这个数列从第2项开始,每一项都等于前两项之和,特别指出第0项是0,第1项是1;例如,0,1,1,2,3,5,8,13,21,...

#!/bin/bash
#
fab() {
        if [ $1 -eq 0 -o $1 -eq 1 ];then
                echo -n "1 "
        else
                echo -n "$[$(fab $[$1-2])+$(fab $[$1-1])] "
        fi
}
for i in $(seq $1);do                                                                                                                                  
        fab $i
done
echo
~