函数定义 与 调用
#函数定义 #标准 function fun1() { echo "one" } #省略括号 function fun2 { echo "two" } #省略关键字 fun3() { echo "$@" } #函数调用 #无参数 fun1 fun2 #有参数 fun3 10 30 70
函数返回值
shell函数返回值表示的是退出状态, 0表示成功, 非0表示失败
那既然不能返回正常的值,改如何get到返回值呢?
- 将得到的结果赋值给全局变量(除了local定义以外的变量都是全局的,即便在函数内部)
- 在函数内部将结果输出,在函数外部使用$() 或 ··捕获
#获取全局 function fun1() { num=99 } fun1 echo $num
#获取局部 function fun2() { local num=88 echo "局部:$num" } fun2 echo $num #只能获得全局 不能同fun1一样用此方法 ret=$(fun2) #调用子函数 echo $ret #输出
#$? 表示函数的退出状态
function fun3()
{ a=90 return $a } fun3 echo $?
#全局变量
read num function fun4() { for((i=$1; i<$2; i++));do ((num+=i)) #改变全局变量的值 done echo "显示fun4内部:$num, $?" #结果为0 return $? #$返回上一条命令的退出状态 } fun4 10 20 #调用 echo "num结果为: $num" #结束 157
#局部变量 read a function fun5() { local a=22 for((i=$1; i<$2; i++)); do ((a+=i)) done echo "显示fun5内部: $a, $?" return $? } ret=$(fun5 1 2) echo "ret结果为: $ret"
结果:
10
显示fun4内部:155, 0
num结果为: 155
20
ret结果为: 显示fun5内部: 23, 0
函数参数
- 定义函数时不能调用参数,如 fun1(x, y) 错误;
- 调用函数时可以调用参数,如 fun1 10 20 正确;
- 函数内部$n可以来接受参数,$1 $2 $3表示第n个参数;
- $#:参数个数
- $@ 和 $* :一次性获取所有的参数
function show() { echo "第一个参数: $1" echo "参数个数: $#" n=$2 for i in $@ do ((n+=10)) echo "第i个参数:$i" done echo $n } show 10 20 30
结果:
第一个参数: 10
参数个数: 3
第i个参数:10
第i个参数:20
第i个参数:30
50