1、标准语法

  1. function fnname() {
  2. statements
  3. return value
  4. }
  • function 是 Shell 中的关键字,专门用来定义函数;
  • fname 是函数名;
  • statements 是函数要执行的代码,也就是一组语句;
  • return value 表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值,这一部分可以写也可以不写。
    1. function getUser() {
    2. echo "当前用户为 ${USER}"
    3. return 0
    4. }
    5. # 调用函数
    6. getUser
    1、简化写法
    1. # 无括号 -- 报错!
    2. function getUser{
    3. echo "当前用户为 ${USER}"
    4. return 0
    5. }
    6. # 无function -- 报错!
    7. getUser() {
    8. echo "当前用户为 ${USER}"
    9. return 0
    10. }

    2、函数调用

    1、无参函数调用
    直接写函数名称即可 ```bash function fnname() { statements return value }

// 调用无参函数 fname

  1. <a name="OYEkL"></a>
  2. ##### 2、有参函数调用:
  3. 参数之间利用空格分割,和 Shell 脚本传递参数一样,函数在定义时候不能指定参数,在调用的时候传递参数即可,并且在调用函数时传递什么参数函数就接受什么参数。
  4. ```bash
  5. // 定义函数
  6. function fnname() {
  7. statements
  8. return value
  9. }
  10. // 调用函数
  11. fname param1 param2 param3

3、函数的参数

1、位置参数:

根据对应位置获取参数,$1~$n $0为脚本名称

function say() {
        echo "第一个参数是:${1}"
        echo "第二个参数是:${2}"
        echo "第三个参数是:${3}"
        echo "第四个参数是:${4}"
}
# 调用函数 根据位置获取参数
say go php java mysql

2、特殊参数
 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/682421/1622190719508-03ad0562-690e-4f62-8b06-a8f1e6d8eb74.png#align=left&display=inline&height=240&margin=%5Bobject%20Object%5D&name=image.png&originHeight=240&originWidth=748&size=24632&status=done&style=none&width=748)<br />**Tips**:局部变量需要特别声明在函数内部,利用 `local` 关键字来声明。
function say() {
        echo "第一个参数是:${1}"
        echo "第二个参数是:${2}"
        echo "第三个参数是:${3}"
        echo "第四个参数是:${4}"

        echo "传递参数个数:${#}"
        echo "传递的参数列表:${*}"
        echo "传递的参数列表:${@}"
}
# 调用函数
say go php java mysql
# 获取函数调用结果
if [ ${?} -eq 0 ]
then
        echo "say方法调用结果成功,值为:${?}"
else
        echo "say方法调用结果失败,值为:${?}"
fi

3、函数返回值

函数返回值利用 $? 来接收。
shell 函数的返回值,只能是整形,并且在 0-257 之间,不能是字符串或其他形式。并且在调用方法和取得返回值之间,不能有任何操作,不然取不到 return 的值。

4、递归函数
lun=0

function recursion() {
        lun=$[${lun}+1]
        echo "$(date)"
        sleep 1

        if [ ${lun} -lt 10 ]
        then
                recursion inner    # 递归调用函数
        fi
}

recursion