禅道博客

分享专业技术知识,文章内容干货满满

《Linux命令行与shell脚本编程大全》第十七章

2022-10-26 09:30:00
李洁
原创 100
摘要:本文是对《Linux命令行与shell脚本编程大全》第十七章的笔记总结。

17.1基本的 脚本函数

17.1.1创建函数

shell中的函数有两种格式,一种是关键字function,一种是name()

function格式为:

function name (

         commands

)

name()格式为

name(){

commands

}

name函数名称不可重复。

17.1.2 使用函数

shell中使用函数,只需要指定函数名即可

file-download-551814.json

file-download-551815.json

17.2返 回值

shell把函数当作一个小型脚本,每次执行完成都有个返回值。

17.2.1 默认退出状态码

默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。在函数执行结束后,可以用标准变量$?来确定函数的退出状态码。

但是如果函数最后一条语句执行成功,中间有语句没有执行成功,返回的状态码也是0。

file-download-551816.json

file-download-551817.json

17.2.2 使用return命令

bash shell使用return命令来退出函数并返回特定的退出状态码。return命令允许指定一个整数值来定义函数的退出状态码。

file-download-551818.json

file-download-551819.json

17.2.3使用函数输出

可以将函数的输出保存到变量中,调用变量进行得到想要的数值。

file-download-551820.json

file-download-551821.json

17.3在函 数中使用变量

17.3.1向函数传递参数

file-download-551822.json

file-download-551823.json

脚本中的addem函数首先会检查脚本传给它的参数数目。如果没有任何参数,或者参数多于两个,addem会返回值-1。如果只有一个参数,addem会将参数与自身相加。如果有两个参数,addem会将它们进行相加。

17.3.2 在函数中处理变量

函数中使用了两种类型的变量:

全局变量

局部变量

1.全局变量

全局变量是在shell脚本中任何地方都有效的变量。如果你在脚本的主体部分定义了一个全局变量,那么可以在函数内读取它的值。类似地,如果你在函数内定义了一个全局变量,可以在脚本的主体部分读取它的值。

默认情况下,你在脚本中定义的任何变量都是全局变量。在函数外定义的变量可在函数内正常访问。

file-download-551825.json

file-download-551826.json

2. 局部变量

无需在函数中使用全局变量,函数内部使用的任何变量都可以被声明成局部变量。要实现这一点,只要在变量声明的前面加上local关键字就可以了。

file-download-551827.json

17.4 数组变量和函数

17.4.1向函数传数组参数

将数组变量当作单个参数传递的话,它不会起作用。

file-download-551828.json

file-download-551829.json

如果你试图将该数组变量作为函数参数,函数只会取数组变量的第一个值。要解决这个问题,你必须将该数组变量的值分解成单个的值,然后将这些值作为函数参数使用。

file-download-551830.json

file-download-551831.json

17.4.2 从函数返回数组

file-download-551832.json

file-download-551833.json

17.5 函 数递归

局部函数变量的一个特性是自成体系。除了从脚本命令行处获得的变量,自成体系的函数不需要使用任何外部资源。

这个特性使得函数可以递归地调用,也就是说,函数可以调用自己来得到结果。通常递归函数都有一个最终可以迭代到的基准值。许多高级数学算法用递归对复杂的方程进行逐级规约,直到基准值定义的那级。

file-download-551834.json

file-download-551835.json

17.6 创 建库

如果要再多个文件中使用一个函数,可以在bash shell 中创建一个函数库文件,多个文件可以调用函数库中的函数。

使用函数库的关键在于source命令。source命令会在当前shell上下文中执行命令,而不是

创建一个新shell。可以用source命令来在shell脚本中运行库文件脚本。这样脚本就可以使用库中的函数了。

source命令有个快捷的别名,称作点操作符(dot operator)。要在shell脚本中运行myfuncs

库文件,只需添加下面这行:

. ./myfuncs

这个例子假定myfuncs库文件和shell脚本位于同一目录。如果不是,你需要使用相应路径访问该文件。

这里已经有一个公用库文件myfuncts。

file-download-551836.json

file-download-551837.json

file-download-551838.json

17.7 在命令行 上使用函数

17.7.1 在命令行上创建函数

shell会解释用户输入的命令,所以可以在命令行上直接定义一个函数。有两种方法。一种方法是采用单行方式定义函数。注:当在命令行上定义函数时,你必须记得在每个命令后面加个分号。

file-download-551839.json

另一种方法是采用多行方式来定义函数。在定义时,bash shell会使用次提示符来提示输入更多命令。用这种方法,你不用在每条命令的末尾放一个分号,只要按下回车键就行。

file-download-551840.json

17.7.2 在.bashrc文件中定义函数

1.直接定义函数

可以在文件末尾编写自己需要的函数,每次开机都会读取该文件,调用函数时可直接使用

2.读取函数文件

可以在.bashrc中使用source命令,直接使用函数库中的函数。

发表评论
评论通过审核后显示。