第16章 函数
16.1 函数的基本知识
16.1.1 函数的定义和调用
函数是Shell脚本中自定义的一系列执行命令,一般来说函数应该设置有返回值(正确返回0,错误返回非0。对于错误返回,可以定义返回其他非0正值来细化错误,这将在下一节中详细描述)。使用函数最大的好处是可避免出现大量重复代码,同时增强了脚本的可读性:如果你在某个Shell脚本中看到checkFileExist这样的代码(实际上是函数调用),一定不难猜出代码的作用。
在Shell中定义函数的方法如下(其中function为定义函数的关键字,可以省略):
- #shell
中的函数定义
#
其中function
为关键字,FUNCTION_NAME
为函数名
function FUNCTION_NAME(){
command1 #
函数体中可以有多个语句,不允许有空语句
command2
...
}
#
省略关键字function
,效果一致
FUNCTION_NAME(){
command1
command2
...
}
下面演示一个简单的函数定义和函数调用相关的例子。你可能会注意到,调用函数的方法时只要调用函数名即可。
- [root@localhost ~]# cat sayHello.sh
#!/bin/bash
function sayHello(){ #
定义函数sayHello
echo "Hello" #
该函数的函数体为打印Hello
} #
函数定义结束
echo "Call function sayHello" #
提示函数调用
sayHello #
函数调用
#
脚本执行结果
[root@localhost ~]# bash sayHello.sh
Call function sayHello
Hello #
这里是调用函数的输出内容
下面的例子稍微复杂一点,在脚本中定义函数countLine,可计算指定文件的行数。
- [root@localhost ~]# cat countLine.sh
#!/bin/bash
FILE=etcpasswd #
指定要检查的文件
function countLine(){ #
定义函数countLine
local i=0
while read line
do
let ++i
done < $FILE
echo "$FILE have $i lines"
}
echo "Call function countLine" #
提示函数调用
countLine #
函数调用
#
执行结果
[root@localhost ~]# bash countLine.sh
Call function countLine
etcpasswd have 36 lines #
这里是调用函数的输出内容