[Shell详解-8]:函数

Shell语法详解目录

bash中的函数类似于C/C++中的函数,但return的返回值与C/C++不同,返回的是exit code,取值为0-2550表示正常结束。

如果想获取函数的输出结果,可以通过echo输出到stdout中,然后通过$(function_name)来获取stdout中的结果。函数的return值可以通过$?来获取。

1. 命令格式

不写return时,默认return 0

[function] func_name() {
    
      # function关键字可以省略
    语句1
    语句2
    ...
}

2. 不获取return值和stdout值

func() {
    
    
    name=Tom
    echo "Hello $name"
}

func

#输出 Hello Tom

3. 获取return值和stdout值

#! /bin/bash

func() {
    
    
    name=Tom
    echo "Hello $name"
    echo "第二行输出"
    return 123
}

output=$(func)
tmp=$(func)
ret=$?

echo "output = $output"
echo "return = $ret"

输出

output = Hello Tom
第二行输出
return = 123

4. 函数的输入参数

在函数内,$1表示第一个输入参数,$2表示第二个输入参数,依此类推。
**注意:**函数内的$0仍然是文件名,而不是函数名。

func() {
    
      # 递归计算 $1 + ($1 - 1) + ($1 - 2) + ... + 0
    word=""
    while [ "${word}" != 'y' ] && [ "${word}" != 'n' ]
    do
        read -p "要进入func($1)函数吗?请输入y/n:" word
    done

    if [ "$word" == 'n' ]
    then
        echo 0
        return 0
    fi  

    if [ $1 -le 0 ] 
    then
        echo 0
        return 0
    fi  

    sum=$(func $(expr $1 - 1))
    echo $(expr $sum + $1)
}

echo $(func 10)

输出:55

5. 函数内的局部变量

可以在函数内定义局部变量,作用范围仅在当前函数内。可以在递归函数中定义局部变量。

local 变量名=变量值

示例

#! /bin/bash

func() {
    
    
    local name=Tom
    echo $name
}
func

echo $name

输出

Tom # 函数内echo输出 Tom
    # 函数外name未定义,输出空行

猜你喜欢

转载自blog.csdn.net/weixin_52341477/article/details/127602281
今日推荐