Shell脚本编写思路和实例讲解

前言

常听见身边有很多学习shell脚本的朋友抱怨shell脚本不好写,好不容易写出来的脚本一直报错,符号空格又太多,错了一个就无法运行还不好排查错误。

客观讲shell脚本的简洁程度确实有些堪忧,但是在Linux运维工作中shell脚本运用得非常广,在有些场合用shell会非常有效率,所以shell脚本编写是必须掌握的技能之一,我们还不能舍弃。

方法要点

言归正传,接下来我将分享我在编写shell脚本的时候学到的经验和写shell脚本的方法。

1.理清思路:在我们想实现一个功能需要写脚本的时候是切忌不要想到就写,避免需要什么功能就先写个什么命令再去完善,这种写法常常会出现在结构上很难调整的问题。在我们开始写脚本之前一定要事先理清楚要怎么去实现这个功能,包括用什么命令和命令的先后顺序。

2.全局观:当我们理清脚本的思路之后,我们这个时候也不能马上就开始写,这个时候我们需要在脑海中思考每一个步骤中可能出现的情况,当出现各种情况后如何应对。在shell脚本中有可能我们要实现一个看似简单的功能会需要有多个条件判断,因为出现在我们当前系统上的情况只是在众多情况中的一种,我们要实现让脚本在任何机器上都能正常运行就必须有“全局观”。通俗讲就是一个排除bug的过程。

3.心细如丝:正如大家感慨的一样,shell脚本有非常多的引号括号空格,每一种意义不一样,多个空格少个空格意义又不一样,写个几十行的shell脚本能一次性写完就无错运行还是有一些难度的。我的在学习shell脚本一开始就强行给自己养成一个习惯,每写完一行就检查一次各种符号括号,刚开始速度非常慢,但是写得多了速度就越来越快而且出错率也越来越低,当养成习惯以后再去写那些符号就成了习惯没有刚开始那么痛苦了。

4.好记性不如烂键盘:有一句不好听的话虽然不好听,但是能提醒到一些正在学习shell脚本的朋友说出来也挺好。当你在抱怨shell脚本如何难写如何易出错的时候那么你总共写过多少行shell?你敲过多少次键盘?当你无数次练习,把键盘都敲到字都掉完了之后还会说这句话吗?对!你还会说这句话,但已经不是抱怨而是评价。

实例

编写脚本checkdisk.sh,运行效果:检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

看到题目后先审题,然后按照我们上面的方法来。

第一步,我们先把要实现的功能理清。

要查看磁盘分区和inode的使用情况那么会用到 df 和df -i 命令

提取出df命令中使用率的部分会用到grep用到cut以及head还有tail等这些对文本处理的命令

要比较数值那么可能会用到中括号和数值比较

最后发广播要用到wall命令

因为磁盘分区并不是只有一个,或许还会用到if条件判断以及循环。

这个时候我们的思路可以是这样:

1.先用grep等文本处理命令取出df中的百分比值

2.用中括号判断这些值这些值是否大于80

3.将大于百分之80的值对应的分区用wall进行广播

第二步,思考每一步会出现的问题和情况然后应对。

在上一步中我们已经把主线理清,既然线路已经规划了那么就开始铺路吧。

1.要取出df命令中的百分比值我们首先需要观察百分比值在df命中是出现在哪个位置,然后用正则表达式匹配,之后用cut等命令取出,但是分区有很多个而且还要判断inode的使用情况所以我们还要搞清楚一共有多少个分区,那么这里会用到几个变量:代表磁盘空间分区个数的变量、代表磁盘inode分区个数的变量、代表被取出的磁盘分区路径的变量、代表被取出的百分比数值的变量。

2.因为包括inode的话磁盘分区要比较的就很多,如果挨个比较的话就会大大增加脚本的行数,写起来非常累,这里就可以考虑利用分区的个数变量利用循环语句来比较每个分区使用量是否达到80%以上以及输出比较结果,而考虑到还有inode则可以用if elif来判断。

3.既然路也铺好了,那就上路吧。

下面我会将我写的脚本贴在这里,可能看起来会有一些长,但是其实只要认真阅读了我上面所有的阐述就会觉得其实非常简单。

注意:在脚本中出现的正则表达式我将不再细讲,有兴趣的朋友可以在网上查询相关资料。

脚本内容就是以上部分,其实按照我之前的思路,这个脚本虽然行数不少,但是并不难以理解,写脚本没有想象的那么难,难的是下不去手。本文这个题目对初学者来说是个不错的练习。

试验

看到这里有朋友会说了,上面稀里哗啦说这么多到底能不能用都不知道毕竟“Linux is interesting”我们需要去玩玩才知道。

试验系统:CentOS 7.3 1611

可以看到我因为在系统上挂了一张光盘,所以有一个分区是100%,运行一下脚本试试能不能测出来。

完美呈现出大于80%的分区名。

那么我们现在再把一个分区使用率增加到80%以上看看是否能都显示出来。

当我们把另外一个分区也撑过80%后依然完美呈现。脚本运行正常。

结语

其实在我们的学习过程中如果遇到感觉很吃力的东西并不是说自己智力有限了自己能力有限了,那只不过是给键盘敲少了找借口,多敲多练即使理解不了也学会怎么用了。

最后给大家推荐一本书!

本文转载自CSDN,作者:Driver_C

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180708A1AE1G00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券