shell - 函数

语法

函数声明

function fn() {
    command

    # 函数的返回值是可选的
    [return value]
}

# 如果写了function关键字,也可以省略函数名后面的小括号
function name {
    command

    # 函数的返回值是可选的
    [return value]
}

# 部分shell支持function关键字,不支持function关键字时可以不写
name() {
    command

    # 函数的返回值是可选的
    [return value]
}

shell也不限制定义和调用的顺序,你可以将定义放在调用的前面,也可以反过来,将定义放在调用的后面

函数参数

和其它编程语言不同的是,shell函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数

在函数内部可以使用$n来接收

  • $1 表示第一个参数
  • $2 表示第二个参数
  • 依次类推

除了$n,还有另外三个比较重要的变量

  • $# 保存参数的个数
  • $* 以一个单字符串的形式保存所有参数
  • $@ 与 ∗ 同 样 是 以 一 个 单 字 符 串 的 形 式 保 存 所 有 参 数 。 但 也 有 不 同 之 处 ( 详 见 * 同样是以一个单字符串的形式保存所有参数。但也有不同之处(详见 @ 和 $* 的区别)

函数返回值

shell中的返回值表示的是函数的退出状态,if、while、for等语句都是根据函数的退出状态来判断条件是否成立

  • 返回值为0表示函数执行成功
  • 返回值为非0表示函数执行失败(出错)
  • 返回值只能是一个介于0~255之间的整数,其中只有0表示成功,其它值都表示失败

函数的返回值是可选的

  • 如果函数体中没有return语句,那么使用默认的退出状态,也就是最后一条命令的退出状态
# $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值
return $?

获取函数处理结果

既然return表示退出状态,那么该如何得到函数的处理结果呢?比如,定义了一个函数,计算从m加到n的和,最终得到的结果该如何返回呢?

这个问题有两种解决方案:

  • 一种是借助全局变量,将得到的结果赋值给全局变量
  • 一种是在函数内部使用echo、printf命令将结果输出,然后在函数外部使用 $(fn) 或者 `fn` 捕获结果

函数调用

调用shell函数时可以给它传递参数,也可以不传递。不管是哪种形式,函数名字后面都不需要带括号

# 如果不传递参数,直接给出函数名字即可
fn

# 如果传递参数,那么多个参数之间以空格分隔
fn param1 param2 ... paramN

示例

#!/bin/bash

getsum() {
    local sum=0

    for ((i = $1; i <= $2; i++)); do
        ((sum += i))
    done

    echo $sum
    return 100
}

read -p "input the first number: " m
read -p "input the second number: " n

echo "the sum is $(getsum $m $n) with return val $?"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值