格式
[ function ] funname [()]
{
action;
[return int;]
}
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
不获取 return值和stdout值
func() {
name=zdkk
echo "Hello $name"
}
func
结果:Hello zdkk
获取 return值和stdout值
func() {
name=zdkk
echo "Hello $name"
echo "abc"
return 123
}
output=$(func)
ret=$?
echo "output = $output"
echo "return = $ret"
结果:
output = Hello zdkk
abc
return = 123
函数的输入参数
在函数内,$1
表示第一个输入参数,$2
表示第二个输入参数,依此类推。
注意:函数内的
$0
仍然是文件名,而不是函数名。
func() { # 递归计算 $1 + ($1 - 1) + ($1 - 2) + ... + 0
word=""
while [ "${word}" != 'y' ] && [ "${word}" != 'n' ]
do
read -p "要进入func($1)函数吗?请输入y/n:" word
done
if [ "$word" == 'n' ]
then
echo 0
return 0
fi
if [ $1 -le 0 ]
then
echo 0
return 0
fi
sum=$(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:n
55
函数内的局部变量
可以在函数内定义局部变量,作用范围仅在当前函数内。
可以在递归函数中定义局部变量。
命令格式:local 变量名=变量值
#! /bin/bash
func() {
local name=zdkk
echo $name
}
func
echo $name
输出:
zdkk
注意2为空行