1、声明函数
需要声明函数,需使用以下语法:
function_name () { 需要执行的命令列表 }
function_name
是函数的名称,将使用它在脚本的其他地方调用。函数名后面必须跟圆括号,后面是用大括号括起来的命令列表。
例如,
#!/bin/bash # 定义函数 MyFunc () { echo "linux cjavapy"
echo `date` } # 调用函数 MyFunc
输出:
$ bash demo.sh
linux cjavapy
2021年 10月 07日 星期四 18:18:28 CST
2、函数传参
可以定义一个函数,在调用函数时接受参数。这些参数可以用$1
、$2
等等来表示。
例如,
#!/bin/bash # 定义函数 MyFunc () { echo "linux cjavapy $1"
echo $2`date` } # 调用函数 MyFunc website 当前时间:
输出:
$ bash demo.sh
linux cjavapy website
当前时间:2021年 10月 07日 星期四 18:28:19 CST
注意:上面示例中传递了两个参数,一个是website,另一个是当前时间:
3、函数返回值
从函数内部执行exit命令,其效果不仅是终止函数的执行,而且还终止调用该函数的shell程序的执行。
如果只是想终止函数的执行,可以使用return命令从函数返回任何值,其语法如下所示:
return code
例如,
#!/bin/bash # 定义函数 MyFunc () { echo "linux cjavapy $1" echo $2`date` return 1 } # 调用函数 MyFunc website 当前时间: ret=$? echo "返回值是 $ret"
输出:
$ bash demo.sh
linux cjavapy website
当前时间:2021年 10月 07日 星期四 18:47:24 CST
返回值是 1
4、函数嵌套
函数内部可以调用自己,也可以调用其他函数。调用自身的函数称为递归函数。
例如,
#!/bin/bash # 函数中调用一个函数 func_one () { echo "第一个函数执行" func_two } func_two () { echo "第二个函数执行" } # 调用函数 func_one
输出:
第一个函数执行
第二个函数执行
5、终端直接调用
可以将常用函数的定义放在.profile中。这些定义将在登录时可用,可以在命令提示符中使用它们。或者,可以将定义到一个文件中,例如,demo.sh
,然后执行命令执行,如下,
$ . demo.sh
执行之后demo.sh
中定义的函数被读取并定义到当前shell,可以在当前终端的窗口直接调用,如下所示,
$ func_one
第一个函数执行
第二个函数执行
如要从shell中删除函数的定义,使用unset -f
命令。
例如,
$ unset -f function_name
注意:unset
还可以删除变量定义。