函数
函数可以将一个复杂的功能划分为若干模块,让程序结构更加清晰,代码重复利用率更高。Shell也支持函数。函数是Shell程序中执行特殊过程的部件,并可以在Shell脚本中重复调用。
1、函数的定义与调用
Shell函数必须先定义后使用,函数定义的格式如下:
[function] 函数名() { 命令序列 [return 返回值] }
其中关键字function可以缺省。函数返回值可以是显式增加return语句,如果不加该语句,则会将最后一条命令运行结果作为返回值。
调用函数只需要给出函数名,不需要加括号,就像一般命令那样使用。函数的调用形式如下:
形式如下:
函数名 参数1 参数2 ...参数n
参数是可选的。下面是一个简单的示例
#!/bin/bash #定义函数 hello () { echo "hello world!" } #调用函数 hello
2、函数返回值
Shell函数返回值只能是整数,一般用来表示函数执行成功与否。如果需要函数返回任意值,如字符串,可以采用以下几种方法。
1、使用全局变量
Shell函数并没有提供全局变量,所有函数都与其所在的父脚本共享变量。这样就可以先定义一个变量,用来接收函数的计算结果,脚本在需要的地方访问这个变量来获得函数的返回值。下面给出一个简单的函数返回值示例:
#!/bin/bash #定义函数 hello () { mystr='hello world!' } #调用函数 hello #显示函数中赋值的变量 echo $mystr
这个方法可以让函数返回多个值,只需要使用多个全局变量。
2、在函数中使用标准输出
将一个Shell函数作为一个子程序调用(命令替换),将返回值写到子程序的标准输出,可以达到返回任意值的目的。下面是相关示例
#!/bin/bash #定义函数 hello () { #将一个值赋值给一个变量作为函数的返回值 mystr='hello world!' #显示字符串 echo $mystr } #调用函数 result=$(hello) #显示函数中赋值的变量 echo $result
3、在函数中使用return返回整数值
前面提到的$?是一个特殊的内部变量,可用于获取上一个命令的返回结果,可以直接通过函数return语句来接收返回值。下面为一个相关示例:
#!/bin/bash addnum () { #将两个参数值的和赋给变量 val=`expr $1 + $2` #使用return将变量值返回 return $val } #调用函数 addnum 4 5 #获取函数返回值 ret=$? echo "两个数的和为:$ret !"
3、函数参数
在Shell中调用函数时可以向其传递参数。与脚本一样,在函数体内不也是通过$n的形式来获取参数的值,例如$1表示第一个参数,$2表示第二个参数,在函数体内部也是通过$n的形式来获取参数的值的,例如,$1表示第一个参数,$2表示第二个参数。