函数

1>函数的定义和调用

  函数是shell脚本中自定义的一系列执行命令,一般来说函数应该设置有返回值(正确返回0,错误返回非0。对于错误返回,可以定义返回其他非0正值来细化错误,这个我会在下一篇博文中详细描述)。使用函数最大的好处是可避免出现大量重复代码,同时增强了脚本的可读性:如果你在某个shell脚本中看到checkFileExiet这样的代码(实际上是函数的调用),一定不难猜出代码的作用。

  在shell中定义函数的方法如下(其中function为定义函数的关键字,可以省略):

#shell中的函数定义
#其中function为关键字,FUNCTION_NAME为函数名
function FUNCTION_NAME() {
   command1 #函数中可以有多个语句,不允许有空语句
   command2
   .....
}
#省略关键字function,效果一致
FUNCTION_NAME() {
   command1
   command2
   .....
}

  下面演示一个简单的函数定义和函数调用相关的例子。你可能会注意到,调用函数的方法只要调用函数名即可。

函数

脚本执行结果
函数
  上图中Hello是调用函数的输出内容



  下面的例子稍微复杂一点,在脚本中定义函数countLine,可计算指定文件的行数。

函数

执行结果
函数
  同样的/etc/passwd have 0 lines 是调用函数的输出内容


2>函数的返回值

  函数的返回值又叫函数的退出状态,实际上是一种通信方式。举个生活中的例子便于大家更清楚的了解函数返回值的概念。

  假设小强和小王说好每周六早上10点都会到她家里玩,可是小强经常会迟到,这时候小王都会发消息问小强他出发没有?小强收到消息会根据实际情况回复消息,如果没有出发就发送“NO”否则“YES”。在这个例子中,小王会发消息问小强出发没有,可以看作是一种“调用”,而小强的回复可以看作是调用的“返回值”。如果使用0代表“NO”,1代表“YES”,那么就更像是真实的函数调用了。但是只有0和1这两种回复还是略显简单了些——如果出发了,那么出发到了哪里了?我们可以使用2代表走到1/4的路程,函数3代表走到了1/2的路程,4代表走到了3/4的路程,5代表已经到楼下等等,这样返回值就更有意义了。

  Shell中的函数可以使用“返回值”的方式来给调用这反馈信息(使用return关键字),不要忘了获取上一个命令返回值的方式是使用$?——这是获取函数返回值的主要方式。下面的例子中将创建checkFileExist函数,用于判断文件是否存在。

函数

执行结果
函数
  图中/etc/notExistFile not exist 是调用函数的输出内容



  下面举一个利用多个函数返回值判断用户输入的例子,如果用户输入的数值大于等于0且小于10则返回0,大于等于10 且小于20则返回1,大于等于20且小于30则返回2,输入其余数则返回3。
函数

脚本执行结果
函数

  今天关于函数的知识就介绍到这,下篇继续为大家分享带参数的函数,谢谢大家!