shell编程(五)——函数

函数(function)是可以重复使用的代码片段,有利于代码的复用。它与别名(alias)的区别是,别名只适合封装简单的单个命令,函数则可以封装复杂的多行命令。

可使用如下形式定义函数,其中关键字function可以省略。

function funName() {
    # 函数体
}

一、参数变量

shell中常见的参数和特殊变量如下:

变量说明
$1~$9函数的第一个到第9个参数
${10}函数的第10个参数
$0函数所在脚本名
$#函数的参数总数
$@函数的全部参数,参数间用空格分隔
$*函数的全部参数,参数之间使用变量$IFS值的第一个字符分隔,默认为空格,可以自定义。
#?如在命令行直接执行函数,下一个命令可以使用$?拿到返回值
$FUNCNAME函数名称(仅在函数内部有值)
function testA ()
{
    echo "$@";
    echo "${0}: ${1}, ${2}, ${3}, ${4}";
    echo "$#"
}

二、函数使用

函数通常有如下三种使用方式:

  • 在交互式环境下定义函数
  • 将函数放在脚本文件中,作为脚本文件的一部分
  • 可放在只包含函数的单独文件中

2.1 交互环境下定义函数

function testA () {
    echo "testA: $1, $2, $3, $4"
}

在交互式环境下,定义函数

在交互式环境中调用函数

定义该函数之后,该函数会在当前Bash进程退出前一直保留。当前Bash进程退出时,该函数立即失效。可以在当前Bash进程中运行 unset 命令,使该函数立即失效

unset testA

2.2 脚本中定义及使用函数

函数定义和使用在同一个文件中,函数的有效期为此脚本创建的bash子进程的生命期。

如下testB.sh 文件内容如下,包含了函数的定义和使用。

function testB () {
    echo "testA: $1, $2, $3, $4"
}

testB a b

脚本执行结果如下:

2.3 函数文件

将经常使用的函数存入函数文件,然后通过函数文件载入Shell的方式,实现函数复用。

定义如下的func.sh 文件

function funcA () {
    echo "funcA: $1, $2, $3, $4"
}

function funcB () {
    echo "funcB: $1, $2, $3, $4"
}

可通过如下两种方式将函数文件载入当前bash进程

source funcFile
. funcFile

三、查看shell定义的函数

可以使用declare 命令,查看shell中定义的函数。

3.1 declare -f

不仅会输出函数名,还会输出所有定义。输出顺序是按照函数名的字母表顺序。由于会输出很多内容,最好通过管道命令配合more或less使用。

3.2 declare -f functionName

使用declare -f functionName,可以查看单个函数定义

3.3 declare -F

可以使用declare -F 查看所有已经定义的函数名,不含函数体。

四、函数变量

Bash 函数体内直接声明的变量,属于全局变量,整个脚本都可以读取。如需定义局部变量,可以使用local关键字。

foo=1

fn () {
    local foo
    foo=2
    echo "fn: foo = $foo"
}

fn

echo "global: foo = $foo"

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值