格式
[ function ] funname [()]{action;[return int;]}
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
不获取 return值和stdout值
func() {name=zdkkecho "Hello $name"}func
结果:Hello zdkk
获取 return值和stdout值
func() {name=zdkkecho "Hello $name"echo "abc"return 123}output=$(func)ret=$?echo "output = $output"echo "return = $ret"
结果:
output = Hello zdkkabcreturn = 123
函数的输入参数
在函数内,$1表示第一个输入参数,$2表示第二个输入参数,依此类推。
注意:函数内的
$0仍然是文件名,而不是函数名。
func() { # 递归计算 $1 + ($1 - 1) + ($1 - 2) + ... + 0word=""while [ "${word}" != 'y' ] && [ "${word}" != 'n' ]doread -p "要进入func($1)函数吗?请输入y/n:" worddoneif [ "$word" == 'n' ]thenecho 0return 0fiif [ $1 -le 0 ]thenecho 0return 0fisum=$(func $(expr $1 - 1))echo $(expr $sum + $1)}echo $(func 10)
输出:
acs@d03778d09cd5:~$ ./test.sh要进入func(10)函数吗?请输入y/n:y要进入func(9)函数吗?请输入y/n:y要进入func(8)函数吗?请输入y/n:y要进入func(7)函数吗?请输入y/n:y要进入func(6)函数吗?请输入y/n:y要进入func(5)函数吗?请输入y/n:y要进入func(4)函数吗?请输入y/n:y要进入func(3)函数吗?请输入y/n:y要进入func(2)函数吗?请输入y/n:y要进入func(1)函数吗?请输入y/n:y要进入func(0)函数吗?请输入y/n:n55
函数内的局部变量
可以在函数内定义局部变量,作用范围仅在当前函数内。
可以在递归函数中定义局部变量。
命令格式:local 变量名=变量值
#! /bin/bashfunc() {local name=zdkkecho $name}funcecho $name
输出:
zdkk
注意2为空行
