Shell 函数

在这里插入图片描述

函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,Shell 也支持函数。Shell 函数必须先定义后使用。

1.定义语法

[function] func_name() {
    list of commands
    [ return value ]
}

# 或
[function] func_name()
{
    list of commands
    [ return value ]
}

注意:

  • 关键字 function 可带可不带,建议带上,提高代码可读性;
  • 不允许带任何行参,但使时可以传递参数,使用$1, $2,..., $*, $@来获取参数;
  • 函数末尾可以显式增加 return 语句,如果不加,会将最后一条命令运行结果作为返回值,使用 $? 可获取函数返回值;
  • 函数返回值只能是整数,一般用来表示函数执行成功与否,0 表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。

如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。

#!/bin/bash

function funcWorld() {
	echo "world"
}
res=`funcWorld`
echo "hello $res"

运行结果:

hello world

2.函数调用方式

要在脚本中调用函数, 只需给出函数名。比如要调用小节“1.Shell函数的定义格式”中的函数 funcWorld(),只需给出函数名 funcWorld,函数名后无需跟小括号()。Shell 函数的调用方式与 Shell 命令很相似。

3.函数返回值的获取

使用$?获取。$?既可以获取上一条命令的退出状态,也可以获取函数的返回值。这里更加可以看出,Shell 函数的调用与命令的执行极为相似。

#!/bin/bash

function add() {
        varAddRes=`expr $1 + $2`
        return $varAddRes
}
add 1 2		#调用函数,传递参数
echo $?

运行结果:

3

4.函数中定义局部变量

Shell 函数中定义的变量默认是 global 的,其作用域从“函数被调用时执行变量定义的地方”开始,到Shell结束或被显示删除处为止。函数定义的变量可以使用local关键字显示定义成 local 的,其作用域局限于函数内,同名local变量会屏蔽 global 变量。但请注意,函数的参数是 local 的。

#!/bin/bash

function test() {
	local localVar=dablelv	#局部变量
}
test
echo $localVar			  	#输出为空

5.函数使用时需要前置申明吗

Shell函数在使用前必须定义,没有申明的说法!一个通常的办法是把函数定义放在脚本开始部分。

6.函数的删除

像删除变量一样,删除函数也可以使用unset命令,不过要加上-f选项,如下所示:

unset -f function_name

7.在命令行中使用函数

如果想在命令行中使用函数,需要在命令行执行函数的定义。直接在命令行定义Shell函数有个缺点,一旦退出Shell,函数定义将失效。可以将函数定义在Home目录下的.bash_profile文件,或者对所有用户均生效的/etc/profile文件,这样每次登录后,profile文件都会被调用,在命令提示符后面输入函数名字就可以立即调用。

注意:修改文件后要想马上生效需要执行source /etc/profile或者source ~/.bash_profile,不然只能在下次重新登录时才生效。


参考文献

阮一峰.Bash 脚本教程
Shell函数.Linux Shell脚本教程:30分钟玩转Shell脚本编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值