十四、函数
1 函数的定义和基本知识
在linux shell中,所有的函数定义都是平行的,即不允许在函数体内再定义其他的函数,但允许函数之间相互调用
1.1 函数的定义和基本知识
-
说明
- linux shell中函数的返回值只能为退出状态0或1
-
语法
[function] function_name(){ command1 command2 ... commandN }
- 在函数名前可以加上关键字function,可选
- 函数体中的命令集合必须含有至少一条命令,函数不允许空命令
- 函数之间通过参数、函数返回值通信
- 函数在脚本中出现的次序可以是任意的,但必须按照脚本中的调用次序执行这些函数
2 向函数传递参数
-
说明
- 在bash shell编程中,向函数传递的参数仍然是以位置参数的方式来传递的,而不能传递数组等其他形式变量
- linux shell脚本编程使用间接变量需使用变量${!parameter}来实现
-
示例
#! /bin/bash function half(){ let "n=$1" let "n=n/2" echo "In the function half() ,the value is $n" } m=$1 echo "Before the value m is $m" half $m echo "After the value m is $m"
3 函数返回值
- 说明
- 在linux shell编程中,函数通过return返回其退出状态,0表示无错误,1表示有错误
4 函数调用
- 说明
- 函数之间允许相互调用
- 允许一个函数调用多个函数
5 局部变量和全局变量
- 说明
- 在linux shell编程中,可以通过local关键字在shell函数中声明局部变量,局部变量将局限在函数范围内
- 函数可调用函数外的全局变量,如果一个局部变量和一个全局变量的名字相同,则在函数中局部变量将会覆盖掉全局变量
6 函数递归
-
说明
- Linux shell中可以递归调用函数,即函数可以直接或间接地调用其自身
- 需要加控制条件,避免无穷递归
-
示例
#! /bin/bash fucntion fact(){ let "num=$1" if [ "$num" -eq 0 ] then factorial=1 else let "decnum=num-1" fact $decnum let "factorial=$num*$?" fi return $factorial } fact $1 echo "Factorial of $1 is $?" exit 0;