计算机系统应用教程网站

网站首页 > 技术文章 正文

Shell脚本怎么写?之简单Shell 脚本函数和模块

btikc 2024-10-27 08:34:53 技术文章 8 ℃ 0 评论

大家好呀,好久不见,经过前面几章的学习,想必大家都已经对shell脚本有了比较深入的了解了,然后也可以自己写一些简单的shell脚本来自动化起来,提高自己工作时候的效率了。我们前几章对Shell脚本的变量,流程控制,脚本的简单实践等都做了系统性的介绍,这节课的话打算给大家介绍一下Shell脚本语法相关的最后一节内容,那就是Shell脚本的函数和模块的概念,以及如何归拢较为大型的Shell脚本。这章介绍完之后,会给大家继续介绍linux 上较长使用的命令和工具,如awk, sed, grep, vim的使用等,以便让大家真正入门且在工作中能熟练的熟悉使用Shell 进行生产工作。

老套路,如果忘记了前面几期内容,想要回顾一下的话,请看下面链接:

Shell脚本怎么写?(0)

Shell脚本怎么写?(1)——Shell 变量类型和定义

Shell脚本怎么写?(1-2)——Shell 变量的高级用法

Shell脚本怎么写?之 Shell脚本中的流程控制(1)

Shell脚本怎么写?之 Shell脚本中的流程控制(2)

Shell脚本怎么写?之简单Shell 脚本编写实践

然后,今天的内容也会从一个示例程序说起,

示例如下:

如上图,我们编写了一个世界上最简单的Shell 脚本程序。

运行结果如下:

然后,我们需要给大家归纳一下,Shell 函数的定义语法,具体如下:

[ function ] funname [()]  //前面的function关键字可以省略

{

    action;

    [return int;]  // 函数存在 return 语法

}

下面我们看一下函数的返回值如何处理。我们编写一个有返回值的Shell 函数,示例如下:

如上图,我们定义了一个函数,执行后可以输入两个值,并返回两个值的和。

值得注意的是,shell脚本中如果要返回一个值,并不是直接使用一个变量去接收函数的返回值的,而是使用了Shell 的特殊变量 $? , 这个特殊系统变量我们在Shell 变量高级篇那章给大家介绍过了,它代表的就是Shell 上一条语句执行结果的返回值

这个示例的其它地方不再赘述,都是使用过和讲过的内容了。

好了,至此,我们已经知道了Shell 脚本的函数语法和定义方法,已经如何从Shell 函数中返回值以及使用返回值。

对于函数,我们还差一部分,那就是函数的入参怎么表示呢?

如果一个Shell 函数接收两个入参,怎么实现这种语法?

接下来还是请看示例:

如上图所示,是一个简单的使用入参的Shell 函数,我们分别打印了第1个,第2个,第6个和第9个参数(这个参数是空,调用时,只传了六个参数),并且打印了所有的参数。

调用传参的方式就是 funcname xxx xxx xxx 后面跟着参数。

这个也是在Shell 变量的高级使用那章讲过的内容,使用Shell 内部的系统变量进行函数参数的传递和使用。

上图的简单Shell 脚本的运行结果如下所示:

好的,综上,我们就把Shell脚本的函数定义,入参,返回值相关语法和使用都介绍明白了。然后,我们下一步就是讲讲Shell 中的模块的概念。(官方也有说法叫做Shell 的文件包含)。

我们还是老规矩,先给一个场景,再看如何办?

比如我们现在有两个Shell 脚本文件。

第一个Shell 脚本是我们自己编写的一个数学函数库,提供数学运算的函数,我们把它命名为math.sh, math.sh 的内容如下:

然后我们想在其它Shell 脚本中使用这俩函数,那应该咋办呢?

比如我们有个toutiao.sh 的文件,我们以前基本上所有的示例都是在这个文件里编写完成的,现在我就想在这个文件中,调用math.sh 中的这两个函数,如何操作呢?

额,不卖关子了,示例如下:

最关键的一句语法是source xxx.sh, 我们在主shell 文件中,使用source math.sh 即可把math.sh 中定义的函数引入到主toutiao.sh 中来,然后直接进行函数调用即可。

上面的函数执行结果如下所示:

好了,如上就是我们今天想要给大家介绍的内容了,懂得如何使用函数和模块,我们就可以聚焦在某个核心功能点的编写,然后通过合理的划分功能模块的方式,提高Shell脚本程序的复用率,写出更加模块化和更加复杂的Shell脚本功能。

Shell脚本在linux 上,虽然使用的越来越少(大多还是被python自动化脚本替代,介绍python自动化脚本那期介绍过原因),但是,在一些老设备的现网和商用环境下,大家如果在工作中需要维护这样的项目,那必然是会接触到大量的Shell脚本的。比如高通芯片驱动的编译基本都是使用shell脚本,Android 的版本编译使用的Android.mk + Shell 脚本等等吧。

希望通过我的介绍,大家有所收获,如果您觉得文章还不错的话,别忘了点赞收藏,关注我,你的关注就是我的动力,我会发布越来越实用的文章,给大家进行工作中常用的IT技能科普。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表