Shell编程之函数与数组

目录

一:shell函数

1.函数的用法

(1)两个数求和

(2)系统资源监控并报警函数

2.函数变量的作用范围

3.函数的参数

4.递归函数

二:Shell数组

(1)获取数组长度

(2)读取某下标赋值

(3)数组遍历

(4)数组切片

(5)数组替换

(6)数组删除

三:Shell脚本调试


一:shell函数

1.函数的用法

Shell函数可用于存放一系列的指令。在Shel1脚本执行的过程中,函数被置于内存中,每次调用函数时不需要从硬盘读取,因此运行的速度比较快。在She11编程中函数并非是必须的元素,但使用函数可以对程序进行更好的组织。将一些相对独立的代码变成函数,可以提高程序可读性与重用性,避免编写大量重复代码。

She11 函数定义的方法如下所示:

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

执行效果如下:

(2)系统资源监控并报警函数

该函数会定期监控系统的CPU和内存的使用率,当使用率超过设定阈值时,会发送报警信息,这里简单模拟为输出到控制台,实际应用可扩展为发送邮件,短信等。

  • 参数说明:函数接收三个参数,分别是CPU使用率阈值,内存使用率阈值以及监控间隔时间(秒)。
  • 循环监控:使用while true 循环不断监控系统资源,通过top和free命令获取CPU和内存使用率,使用bc命令进行浮点数比较。
  • 报警处理:当使用率超过阈值时,调用send_alert函数发送报警信息。

2.函数变量的作用范围

在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local来实现。函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响。local命令的使用如下所示。

执行效果如下:

上述脚本中,myfun函数内部使用了local命令设置变量i,其作用是将变量i 限制在函数内部。myfun 函数外部同样定义了变量i,两个变量互不影响。脚本执行优先调用函数的变量,之后又调用外部变量。

3.函数的参数

在使用函数参数时,函数名称在前参数在后,函数名和参数之间用空格分隔,可以有多个参数,参数使用$1、$2、$3.的方式表示。以此类推,从第10个参数开始,调用方法为${18},不加大括号无法调用成功。下面是函数参数的一个简单应用。

执行效果如下:

4.递归函数

She11也可以实现递归函数,就是可以调用自己本身的函数。在Linux系统上编写She11脚本的时候,经常需要递归遍历系统的目录,列出目录下的文件和目录,逐层递归列出,并对这些层级关系进行展示。具体的实现过程如下所示。

执行效果如下:

二:Shell数组

在she11脚本中,数组是一种常见的数据结构,主要的应用场景包括:获取数组长度、获取元素长度、遍历元素、元素切片、元素替换、元素删除等等。She1l中的数组与Java、C、Python 不同,只有维数组,没有二维数组。数组元素的大小与限制,也不需要事先定义。Shell数组用括号()来表示,元素用空格分隔,元素的下标与大部分编程语言类似从0开始。

数组常用定义方法包括以下几种:

(1)获取数组长度

在she11 编程中,数组是一种用于存储多个值的数据结构。获取数组长度(即数组中元素的个数在很多场景下都非常有用,比如进行数组遍历、数据处理等。普通数组是She11中最常见的数组类型其下标是从0开始的连续整数。

获取普通数组长度可以使用${#数组名[@]}或${#数组名[*]}这两种语法,它们的效果是一样的。

(2)读取某下标赋值

在shell编程里,你可以读取数组中指定下标的元素,也可以给指定下标的数组元素赋值。普通数组是Shell中最常用的数组类型,其下标是从开始的整数。

(3)数组遍历

在Shell编程里,数组遍历指的是按顺序访问数组中的每一个元素,并对这些元素执行特定操作的过程这在处理一组相关数据时非常有用,比如批量处理文件、统计数据等。

执行效果如下:

(4)数组切片

数组切片是一种操作,用于从数组中提取一部分连续的元素,形成一个新的数组。

语法:${array[@]:start:length},其中start是开始的索引,length是要提取的元素个数。

(5)数组替换

//${数组名[@]/查找字符/替换字符}

此方法并不会替换数组原有的内容:

改变数组原有的内容:

(6)数组删除

删除数组

删除第三个元素

三:Shell脚本调试

在Shell脚本开发中,经常碰到一些规范方面的问题,例如忘了使用引号或在if语句末尾处忘记加fi结束。要注意把复杂的脚本简单化,要思路清晰,并且分段实现。当执行脚本时出现错误后,不要只看那些提示的错误行,而是要观察整个相关的代码段。

为避免编写的脚本出错,除了在编写脚本时注意书写规范,排除语法错误,更重要的是利用调试脚本工具来调试脚本。echo命令是最有用的调试脚本工具之一,一般在可能出现问题的脚本中加入echo命令,采用的是分段排查的方式。

除了echo命令之外,bashshell也有相应参数可以调试脚本。使用bash命令参数调试,命令的语法为:

常用参数含义:

  • -n:不会执行该脚本,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会提示报错。
  • -v:在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错误,也会给出错误提示。
  • -x:将执行的脚本内容输出到屏幕上,这个是对调试很有用的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值