欢迎光临
我们一直在努力

Shell编程之函数与数组

一.Shell 函数的基本概念

和其他编程语言(比如 Python、Java)的函数一样,Shell 函数的核心目的是:
代码复用:把重复执行的逻辑封装成函数,调用即可,不用反复写相同代码;
代码模块化:把复杂脚本拆分成多个小函数,每个函数负责一个独立功能,脚本结构更清晰,便于维护;
简化调试:出问题时只需定位到对应的函数,不用在冗长的脚本里逐行找。

函数的用法

语法:

[function] 函数名(){

命令序列

[return x]

}

function:关键字表示定义一个函数,可以省略
({):表示函数执行命令的入口,该符号可以与函数名同行也可以在函数名下一行的句首
(}):表示函数体结束,两个大括号之间{ }是函数体
命令序列:部分可以是任意的Shell命令,也可以调用其他函数
return:表示退出函数返回一个推出值,通过返回值判断执行是否成功。也可以使用exit终止整个shell脚本

例如1:
两个数求和:
1.运行脚本后,先看到 请输入第一个数: → 你输入 2(存到 num1 )。
2.接着 请输入第二个数: → 你输入 3(存到 num2 )。
3.脚本检查两个数都是纯数字,合法。
4.然后计算 2+3=5,输出:
你输入的两个数为: 2 和 3.
两个数的和为: 5


例如2:
系统资源监控并报警函数

参数说明:函数接受三个参数,分别是CPU使用率值、内存使用率阈值以及监控间隔时间(秒)

循环监控:使用while true循环不断监控系统资源,通过top和free命令获取cpu和内存使用率,使用bc命令进行浮点数比较

报警处理:当使用超过阈值时,调用dend_alert函数发送报警信息

二、函数的参数传递与接收

Shell 函数没有形参定义,通过位置参数接收外部传入的值,规则和脚本的位置参数一致:

符号含义
$1-$9 接收第 1 到第 9 个传入参数
${10} 接收第 10 个及以上参数(必须加花括号)
$# 传入参数的总个数
$@ 所有传入参数(逐个独立)
$* 所有传入参数(整体字符串)

示例:带参数的函数

 函数变量的作用范围

在shell脚本中函数的执行并不会来气一个新的的子Shell,而是仅在当前定义的shell环境中有效

函数的参数

用法:

函数名称 参数1 参数2 参数3 ……

例如:

递归函数

例如:

三.总结

1.  Shell 函数核心用途是封装可复用代码,定义有 函数名() 和 function 函数名() 两种方式,调用直接写函数名即可。

2.  参数通过 $1/$2/$# 等位置变量接收,返回值分两种场景:return 返回复状态(0-255),echo 返回数据(字符串 / 大数)。

3.  关键技巧:用 local 定义局部变量、通过 source 导入通用函数、避免函数名与系统命令重名

四.Shell数组

数组的定义方法:

方法一:

数组名=(value0 value1 value2)

获取数组长度

查看数组长度: ${#数组名[*]}(合并所有元素,等同于传入一个包含所有元素的字符串)

查看数组内容:${#数组名[@]}(保留元素独立性,等同于分别传入每个元素)

例如:

读取某下标赋值

数组遍历

数组切片

语法:

${array[@]:start:length }

start:开始的索引

length:要提取的元素个数

例如:

数组替换

例如:

数组删除

例如:


五.Shell脚本调试

语法:

sh [-nvx] 脚本名

-n:不会执行脚本,仅查询脚本语法是否有问题,如果没有语法文图就不显示任何内容、如果有问题会提示报错

-v:在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错,则会给出错误提示

-x:将执行的脚本内容输出到屏幕上,这是对调试很有用的参数

例如:

赞(0)
未经允许不得转载:171主机测评 » Shell编程之函数与数组
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址