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

本文详细介绍了Bash Shell脚本中的函数使用,包括创建函数的两种格式、如何调用函数、函数的返回值处理、参数传递、变量作用域、数组操作以及函数的递归和库文件的创建。通过实例解析了如何在命令行上定义和使用函数,并强调了函数在脚本中的重要性及其灵活性。
摘要由CSDN通过智能技术生成

1. 基本的脚本函数

函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用。要在脚本中使用该代码块时,只要使用所起的函数名就可以,称为调用函数。

1.1 创建函数

有两种格式可以用来在bash shell脚本中创建函数。第一种格式采用关键字function,后跟分配给该代码块的函数名。

function name {

commands

}

第二种格式函数名后的空括号表明正在定义的是一个函数。

name() {

commands

}

1.2 使用函数

要在脚本中使用函数,需要在行中指定函数名。
在这里插入图片描述
在这里插入图片描述

每次引用函数名func1时,bash shell会找到func1函数的定义并执行你在那里定义的命令。
在这里插入图片描述
在这里插入图片描述

注意:方法名是唯一的,重新定义函数后,后续的函数调用都会使用第二个定义。

2.返回值

2.1 默认退出状态码

在函数执行结束后,可以用标准变量$?来确定函数的退出状态码。
在这里插入图片描述

下面的例子由于函数最后一条语句echo运行成功,该函数的退出状态码就是0。
在这里插入图片描述

2.2 使用 return 命令

return命令允许指定一个整数值来定义函数的退出状态码。
在这里插入图片描述

dbl函数会将 $ value变量中用户输入的值翻倍,然后用return命令返回结果。脚本用$?变量显示了该值。

退出状态码必须是0~255,函数的结果必须生成一个小于256的整数值。任何大于256的值都会产生一个错误值。
在这里插入图片描述

2.3 使用函数输出

可以用函数的输出来获得任何类型的函数输出,并将其保存到变量中。

result=‘dbl’

这个命令会将dbl函数的输出赋给$result变量。
在这里插入图片描述

3.在函数中使用变量

3.1 向函数传递参数

函数可以使用标准的参数环境变量来表示命令行上传给函数的参数。

在脚本中指定函数时,必须将参数和函数放在同一行,像这样:

func1 $value1 10
在这里插入图片描述
在这里插入图片描述

3.2 在函数中处理变量

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

q 全局变量

q 局部变量

3.2.1 全局变量

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

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

3.2.2 局部变量

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

local temp

也可以在变量赋值语句中使用local关键字:

local temp=$[ $value + 5 ]
在这里插入图片描述

4. 数组变量和函数

4.1 向函数传数组参数

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

如果你试图将该数组变量作为函数参数,函数只会取数组变量的第一个值。

必须将该数组变量的值分解成单个的值,然后将这些值作为函数参数使用。
在这里插入图片描述

4.2 从函数返回数组

函数用echo语句来按正确顺序输出单个数组值,然后脚本再将它们重新放进一个新的数组变量中。
在这里插入图片描述
在这里插入图片描述

5.函数递归

局部函数变量的一个特性是自成体系,使得函数可以递归地调用。

要计算5的阶乘,可以执行如下方程:

5! = 1 * 2 * 3 * 4 * 5 = 120

使用递归,方程可以简化成以下形式:

x! = x * (x-1)!

也就是说,x的阶乘等于x乘以x-1的阶乘。
在这里插入图片描述
在这里插入图片描述

6.创建库

bash shell允许创建函数库文件,然后在多个脚本中引用该库文件。

这个过程的第一步是创建一个包含脚本中所需函数的公用库文件。
在这里插入图片描述

source命令会在当前shell上下文中执行命令,而不是创建一个新shell。

source名称也称作点操作符,要在shell脚本中运行myfuncs库文件,只需添加下面这行:

. ./myfuncs
在这里插入图片描述
在这里插入图片描述

7.在命令行上使用函数

7.1 在命令行上创建函数

一种方法是采用单行方式定义函数。
在这里插入图片描述

另一种方法是采用多行方式来定义函数。

bash shell会使用次提示符来提示输入更多命令。用这种方法,你不用在每条命令的末尾放一个分号,只要按下回车键就行。
在这里插入图片描述

在函数的尾部使用花括号,shell就会知道你已经完成了函数的定义。

7.2 在.bashrc 文件中定义函数

在命令行上直接定义shell函数的明显缺点是退出shell时,函数就消失了。

简单的方法是将函数定义在一个特定的位置,这个位置在每次启动一个新shell的时候,都会由shell重新载入。

最佳地点就是.bashrc文件。

7.2.1 直接定义函数

可以直接在主目录下的.bashrc文件中定义函数。
在这里插入图片描述

保存后source .bashrc可生效,接着就可以在系统上任意地方使用这个函数了。
在这里插入图片描述

7.2.2 读取函数文件

只要是在shell脚本中,都可以用source命令(或者它的别名点操作符)将库文件中的函数

添加到你的.bashrc脚本中。
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值