Shell 函数

函数用于代码重用。

函数定义封装代码块,函数调用执行代码块,1次定义,N次调用,即N次重用。

1 基本使用

函数的使用步骤:1)定义函数;2)调用函数。

定义函数语法

function 函数名()
{
  函数体
}

实际项目中,函数名要求见名思义。

简化写法:省略function

函数名()
{
  函数体
}

例1:定义函数显示网站与作者。

function f1(){
  echo "网站名称:小步教程"
  echo "网站地址:www.xiaobuteach.com"
  echo "网站作者:小步2023"
}

调用函数语法

函数名

没有定义参数时,直接写函数名即调用,就像我们调用其它命令一样。

可以理解为:系统的命令就是函数。

完整示例:

#定义函数
function f1(){
    echo "网站名称:小步教程"
    echo "网站地址:www.xiaobuteach.com"
    echo "网站作者:小步2023"
}
 
#调用函数
f1
#再调用一次
f1

img

2 变量作用域

shell脚本文件的变量分两种:全局变量与局部变量。

全局变量:无论函数内部与外部,直接声明的变量都属于shell文件内的全局变量,定义之后整个文件都可以访问。我们之前使用变量都属于这类。

局部变量:函数内部通过local声明的变量,属于局部变量,离开函数就无法访问。

local 变量=值

local 变量

示例

var1="网站名称:小步教程"
function f1(){
    var2="网站地址:www.xiaobuteach.com"
    local var3
    var3="网站作者:小步2023"
 
    echo "内部访问var1:$var1"
    echo "内部访问var2:$var2"
    echo "内部访问var3:$var3"
}
 
f1
 
echo "外部访问var1:$var1"
echo "外部访问var2:$var2"
echo "外部访问var3:$var3"

img

注意事项

脚本文件里定义的变量,无论全局变量与局部变量,直接执行完毕之后,当前Shell无法访问。

3 参数

我们调用系统的命令都会传递参数,例如创建文件夹

mkdir 文件夹1

这里是一个参数;

还可以多个参数:

mddir 文件夹1 文件夹2 文件夹3

调用函数传递参数语法

函数名 参数1 参数2 …参数n

定义函数获取参数

不像很多语言,定义参数需要设置函数声明。Shell函数只需要在函数体中直接获取传递参数即可。

$1获取第1个参数,$2获取第2个参数,依次类推。

示例

例1:上述函数的网站名与作者由参数传递。


f3(){
    echo "网站名称:$1"
    echo "网站地址:$2"
    echo "网站作者:$3"
}
 
#调用函数
f3 小步教程 www.xiaobuteach 小步2023

img

动态获取函数与参数信息

$FUNCNAME表示函数名字,$#表示参数个数,$*表示所有参数。

f3(){
    echo "网站名称:$1"
    echo "网站地址:$2"
    echo "网站作者:$3" 

    echo "函数名:$FUNNAME,参数个数:$#,参数列表:$*"
}

 

#调用函数
f3 小步教程 www.xiaobuteach 小步2023

img