在其他语言中,我们多次或者经常重复使用的代码片段,会被我们放入一个函数,然后多次引/调用该函数就十分方便了。shell脚本语言也不例外。
我认为,函数是代码自身的第一层抽象封装。
源代码见github:https://github.com/timo1160139211/shellCoding/blob/master/function.sh
函数:function
语法
声明函数
两种方式声明函数:
1.”function”不可以省略(bash)
function find {
}
2.不得添加参数
find() {
}
两种声明方式效果等价。
注意:
- 函数名和”{“之间必须有空格
- 不得添加参数
- 必须在调用前声明
- 无法重载
- 后来的声明会覆盖之前的声明
$1 $? 等特殊变量介绍见http://blog.csdn.net/timo1160139211/article/details/77131435
调用函数
直接指定函数名即可。一定要注意在声明之后才可以调用
- 其实函数被调用时会被当作一个小脚本来看待,调用时也可以在函数名后跟参数。
- 两种方式在调用时都不可以加() :
正确的调用方式:
我们看一下返回结果:
函数的返回值
既然把函数也当作一个小脚本,那么函数也有退出状态码咯?bingo! 函数运行结束后也会有一个退出状态码。可以用$?变量来显示上一条命令/函数执行结束的退出状态码。退出状态码中,默认的常用状态码这里有介绍->blog<-
当我们不想使用默认的退出状态码时,怎么办呢?当然,shell也为我们提供了return,像其他语言函数中return 一样,不过(整形)返回值必须在0~255之间。否则将会被进行 模256的运算,除此之外return也不可以返回字符串或者其他类型,那么我们想要返回字符串时怎么办呢?我们需要调用函数其他命令去使函数有输出值。
return
我们来看一下return 的使用:
那么,我么想要返回字符串时怎么办呢?我们需要这样做:捕获函数的输出到一个变量
函数的输出
我们来看一下函数的输出,函数的输出其实是值得函数中的命令的输出值的总和,我们来看这么一个例子:
-
函数: 函数体内部一共有三行代码
-
调用: 分别是普通调用 和 捕获返回值调用
-
返回值:我们用result捕获 ` ` 中运算的结果(即函数的输出)
从两次调用的结果顺序来看,普通调用按正常顺序输出,而捕获返回值调用则将第1、3行的echo作为函数的输出来对待。
在函数中使用变量
参数
1
全局变量
局部变量
创建库
命令行上的函数
.bashrc中定义函数
参考资料:
< Linux命令行与shell脚本编程大全 >人民邮电出版社 ISBN-9787115288899