目录
一、shell函数概述
函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程,它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分。
函数和shell程序区别
shell程序在子shell中运行
函数在当前Shell中运行。因此在当前Shell中,函数可对shell中变量进行修改
二、函数的作用
避免代码重复 还能将大工程量的代码分割成多个小的代码模块 方便调用 使代码更简洁 可读性更强
三、定义函数
格式1、
function 函数名 {
命令序列
}
格式2、
函数名 (){
命令序列
}
调用函数:直接在主代码中使用函数名 即可调用函数定义的代码
查看函数:
# 查看当前已定义的函数名
declare -F
# 查看当前已定义的函数定义
declare -f
# 查看指定当前已定义的函数名
declare -f func_name
# 查看当前已定义的函数名定义
declare -F func_name
四、函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
(1) 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
(2) 退出状态码必须是0~255,超出时值将为除以256取余
函数的执行结果返回值:
使用echo等命令进行输出
函数体中调用命令的输出结果
函数的退出状态码:
默认取决于函数中执行的最后一条命令的退出状态码
例子
五、函数传参
通过在 调用函数时,后面跟位置参数;在函数体里使用 $1 $2 来引用函数后面跟的位置参数
函数体里面的 $1$2 代表的是调用函数时,函数名后面跟的 第一个 第二个 位置参数
.函数外的 $1 $2 代表的是执行脚本时,脚本后面跟的 第一个 第二个 位置参数
六、函数变量的作用范围
- 函数在Shell脚本中仅在当前Shell环境中有效
- Shell脚本中变量默认全局有效
- 将变量限定在函数内部使用local命令
案例
#!/bin/bash
#函数变量的作用范围
myfun() {
a=8
local a=10
echo $a
}
####### main ########
a=9
myfun
echo $a
七、函数的递归
- 函数调用自己本身的函数
- 递归调用,实现阶乘的计算
递归目录