《Linux命令行与shell脚本编程大全》第17章:创建函数(学习笔记)
原创- 2023-12-21 15:20:45
- 1424
本篇目录
17.1 基本的脚本函数
17.1.1 创建函数
格式1:
function name {
commands
}
格式2:
name( ) {
commands
}
17.1.2 使用函数
注意:
1. 要先定义函数再使用,否则报错
2. 函数名要唯一
3. 重新定义函数后,新定义会覆盖原来的函数定义
17.2 返回值
函数运行结束时会返回一个退出状态码。
17.2.1 默认退出状态码
在函数执行结束后,可以用标准变量$?来确定函数的退出状态码。
因为函数的退出状态码是函数中最后一条命令返回的退出状态码,所以无法知道函数中其他的命令是否运行成功。
17.2.2 使用 return 命令
return命令来退出函数并返回特定的退出状态码,return命令允许指定一个整数值来定义函数的退出状态码。
注意:
1. 函数退出状态码必须是0~255,较大值和字符串不适合用这种方法。
2. 函数一结束就取返回值。
17.2.3 使用函数输出
17.3 在函数中使用变量
将函数输出保存在变量中
result=$(func1)
17.3.1 向函数传递参数
$#判断传给函数的参数数目
在脚本中指定函数时,必须将参数和函数放在同一行func1 $1 $2
echo -n 不换行输出
echo -e激活转义字符
函数无法直接获取脚本在命令行中的参数值。
需要在调用函数时手动将参数传过去。
17.3.2 在函数中处理变量
1. 全局变量
函数内的全局变量在脚本主体部分读取,脚本主体的全局变量能被函数读取。
2. 局部变量
函数内部使用的任何变量都可以被声明成局部变量。
变量声明时加local
local temp
在变量赋值语句中加local关键字
local temp=$[ $value + 5 ]
17.4 数组变量和函数
17.4.1 向函数传数组参数
数组变量作为函数参数,函数只会取数组变量的第一个值。需要将数组变量的值分解成单个的值。
17.4.2 从函数返回数组
17.5 函数递归
理解递归
Hello World
进入递归函数---------------------------------
&1 本次执行输入值 is 5
---------------------------------
$temp is 4
进入递归函数---------------------------------
&1 本次执行输入值 is 4
---------------------------------
$temp is 3
进入递归函数---------------------------------
&1 本次执行输入值 is 3
---------------------------------
$temp is 2
进入递归函数---------------------------------
&1 本次执行输入值 is 2
---------------------------------
$temp is 1
进入递归函数---------------------------------
&1 本次执行输入值 is 1
本次执行输入值 is 1,跳出递归
跳出递归函数---------------------------------
对应输入值是2的调用
$result is 1
DGFunction 本次执行返回值 1*2
---------------------------------
对应输入值是3的调用
$result is 2
DGFunction 本次执行返回值 2*3
---------------------------------
对应输入值是4的调用
$result is 6
DGFunction 本次执行返回值 6*4
---------------------------------
对应输入值是5的调用
$result is 24
DGFunction 本次执行返回值 24*5
---------------------------------
result is 120
17.6 创建库
source命令或者点操作符可以使用库中的函数,如果不在同一目录下,需要使用相应路径访问该文件。
17.7 在命令行上使用函数
17.7.1 在命令行上创建函数
可以直接在命令行上定义一个函数,采用单行方式定义函数,命令后要加分号
采用多行方式定义函数,末尾使用花括号,代表函数定义完成
17.7.2 在.bashrc 文件中定义函数
1. 直接定义函数
在.bashrc文件中最下方添加函数
2. 读取函数文件
用source命令(或者它的别名点操作符)将库文件中的函数 添加到你的.bashrc脚本中。