TypechoJoeTheme

MetMan's Blog

网站页面

Shell函数语法

MetMan博 主
2023-12-10
/
0 评论
/
155 阅读
/
577 个字
/
百度已收录
12/10
本文最后更新于 2023年12月10日,已超过 284天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

shell函数通过组合命令来实现特定目的及代码复用。

函数定义

函数定义两种写法:

#第一种写法
func_name () {
   cmds
}

#第二种写法
function func_name [()] {
   cmds
}

不加function关键字的函数定义可移植性更好。函数必须在使用之前定义,一般在脚本开始出定义或者放在独立的脚本中用点号( . )来source引用它(这有点像其它语言include包含头文件处理)。

函数调用

函数调用方式与执行shell命令相同,需要提供函数名称和对应参数,参数不需要使用括号括起来。

myfunc 10 true  

需要注意的是,在函数体内位置参数($1 $2 ... $# $@ $*)都是该函数的参数。父脚本参数暂时被函数参数掩盖。

$0依旧是父脚本的名称。当函数完成时,原来命令行参数会恢复。

#!/bin/bash

myfunc() {
    echo 'function arg[0]=' $0
    echo 'function arg[1]=' $1
    echo 'function arg[2]=' $2
}

echo 'script arg[0]=' $0
echo 'script arg[1]=' $1
echo 'script arg[2]=' $2

type myfunc  #使用type命令查看myfunc类型
myfunc func1 func2

执行结果

$./func_arg.sh hi you  
script arg[0]= ./func_arg.sh
script arg[1]= hi
script arg[2]= you
myfunc is a function
myfunc ()
{
    echo 'function arg[0]=' $0;
    echo 'function arg[1]=' $1;
    echo 'function arg[2]=' $2
}
function arg[0]= ./func_arg.sh
function arg[1]= func1
function arg[2]= func2

函数退出状态

前面说了shell函数很像命令,命令执行会有exit status,使用$?可以查询。同样的函数也有退出状态,很像函数返回值。

shell函数中使用return命令使函数返回调用脚本,不能使用exit命令,这会终止整个shell脚本。

如果return后面不加参数,使用默认退出状态,即最后一个执行的命令的退出状态(0代表成功,非0代表失败)。退出状态可以通过$?捕获。

return exit-value指定退出码,函数会像命令一样返回整数的退出状态值,需要注意的是在bash中退出码范围为0-255,当退出码为256时返回的是0.

#!/bin/bash

#第一种函数返回值:return指定返回值,需要注意不能超过255,且使用$?引用返回值
myfunc() {
    local rc=999
    return 255
}

#第二种函数返回值:函数中使用echo输出返回值,注意echo不要输出其他信息
myfunc1() {
    rc1=999
    echo $rc1
    return
}

#第三种函数返回值:使用全局shell变量
myfunc2() {
    rc2=999
    echo $rc2
    return 257
}

myfunc
echo 'local rc' $?

rc_out=`myfunc1`
echo 'rcode outside function' $rc_out

myfunc2
echo 'myfunc2 rc' $?
echo 'global variable rc2=' $rc2

执行结果

local rc 255
rcode outside function 999
999
myfunc2 rc 1
global variable rc2= 999

函数局部变量

函数内变量是全局变量,不仅函数可见,脚本其他地方也可见。bash中可用local关键字定义函数局部变量。

#!/bin/bash
func ()
{
  local loc_var=23
  global_var=999
}

func   #调用函数
echo "loc_var=" $loc_var
echo "global_var=" $global_var

执行结果

loc_var=
global_var= 999

注:如果函数func没有调用,变量global_var就未定义。

小结

当开发一定规模的shell脚本时应该考虑函数组织方式,尽可能的复用共性函数。

shellbash
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/79/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码