目录
一.概念
(一)什么是函数?
在编程中,函数是一种可重用的代码块,用于执行特定的任务或计算。函数接受输入参数,并返回一个输出结果。函数可以使代码更易于维护和组织,同时也可以提高代码的重用性和可读性。在执行函数时,可以通过在函数名称后面加上括号,将所需的参数传递给函数。
(二)函数的作用
使用函数可以避免代码重复使用,将较大的工程代码分割成为若干个较小的功能模块,便于去调用,使得代码更加的简洁明朗,有更强的可读性。
二.函数的表现方式(定义函数)
1)function 函数名{
命令
....
}
2) 函数名(){
命令
....
}
调用函数:直接在主代码中使用 函数名 即可
三.如何获取函数的返回值
(1)在函数里使用 echo 返回值,在函数外使用 变量=$(函数名) 获取返回值
(2)在函数里使用 return 返回值,在函数外紧接着使用 echo $? 获取返回值
(注意:只能返回0-255,超出255会除以255取余数来返回)
四.函数变量的作用范围
1)脚本中定义的函数只在脚本的shell环境有效
2)脚本中定义的变量默认在脚本的shell环境中全局有效(在函数体内外都有效)
3)在函数体内使用 local 变量 定义的局部变量只能在函数体内有效,且此后此局部变量与函数体外同名的全局变量没有任何关系
五.函数传参
通过在 调用函数时,后面跟位置参数;在函数体里使用 $1 $2 来引用函数后面跟的位置参数
注意:
1)函数体外的 $1 $2等等代表的是执行脚本时,脚本后面跟的 第一个 第二个 位置参数
函数体外的$#代表的是执行脚本时,脚本后面跟的 所有位置参数的 个数
函数体外的$@ $*代表的是执行脚本时,脚本后面跟的 所有 位置参数
2)函数体里面的 $1 $2 代表的是调用函数时,函数名后面跟的 第一个 第二个 位置参数
函数体外的$#代表的是调用函数时,脚本后面跟的 所有位置参数的 个数
函数体外的$@ $*代表的是调用函数时,脚本后面跟的 所有 位置参数
3)不管在函数体内还是函数体外,$0 都代表脚本本身
六.函数的递归(在函数体里调用函数本身)
(1)求阶乘
fact() {
if [ $1 -eq 1 ];then
echo 1
else
tmp=$[$1 - 1]
result=$(fact $tmp)
echo $[$1 * $result]
fi
}
(2)递归目录
dgml() {
for i in $(ls $1)
do
if [ -d $1/$i ];then
echo -e "$2$1/$i 为目录"
dgdir $1/$i "\t$2"
else
echo -e "$2$1/$i 为文件"
fi
done
}
七.函数库
首先需要将一些常用的函数保存在一个特定的函数库文件中,需要使用时可以直接在shell脚本文件开头位置用 source 函数库文件 加载函数即可直接使用。
vim myfunc.sh #创建特定函数库文件
hanshu1() {....} #创建函数1
hanshu2() {....} #创建函数2
vim shell.sh #编辑shell脚本
source myfunc.sh #加载函数库文件
hanshu1 #直接调用函数