Shell在日常工作中的应用实践
Tech导读
本文将从测试开发工作痛点出发,重在探讨Shell在日常工作中的实战应用,由浅入深,层层递进,将用户命令转化成计算机内核所能够理解的指令,逐步实现与操作系统的完美交互。另外,为了应对高频使用场景,Shell通过函数化封装来实现工具调用,避免陷入战术上勤奋的误区。
导读
本文将从测试开发工作痛点出发,重在探讨Shell在日常工作中的实战应用,由浅入深,层层递进,将用户命令转化成计算机内核所能够理解的指令,逐步实现与操作系统的完美交互。另外,为了应对高频使用场景,Shell通过函数化封装来实现工具调用,避免陷入战术上勤奋的误区。
01 Shell可以帮大家做什么
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
作为一名测试开发工程师,在与linux服务器交互过程中,大都遇到过以下这些问题:
一次申请多台服务器,多台服务器需要安装相同软件,配置相同的环境,同样的操作需要重复多次; 工作中经常会使用命令行命令来完成一些操作,但是有些命令使用率很高,而且很长,每次都全部敲进去势必会浪费很多时间(比如查日志)。
02
功能介绍
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
Shell脚本语言的优势在于处理偏操作系统底层的业务,例如,Linux系统内部很多应用是用shell脚本语言开发的,因为有众多的Linux系统命令为它作支撑,特别是Linux正则表达式和三剑客grep、awk、sed等命令。
对于一些常见的系统脚本,使用shell开发会更简单、更快速。就像让软件一键自动化安装、优化,监控报警脚本,软件启动脚本,日志分析脚本等,虽然PHP和Python语言也能做到这些,但是由于掌握难度、开发效率和开发习惯等,可能就不如shell脚本语言流行及有优势了。
shell是一个C语言编写的脚本语言,它是用户与linux的桥梁,用户输入命令交给shell来处理,shell将相应的操作传递给内核,内核把处理的结果输出给用户。
可参考如下流程示意图:
03
基本用法
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕——
下面首先来介绍下日常使用较多的基本指令:
3.1 文件拷贝
3.2 文件合并
有时候,要遇到将多个文件合并成一个的需求,除了重复的复制和粘贴,还可以通过简单指令来辅助实现。
【cat命令】
默认地,cat命令可以直接接收多个参数,这样,通过重定向可以很方便地合并文件:效果如下:
04 案例分享
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目
4.1 自动添加注释
下面脚本我都注释了具体含义,可参考:
4.2 内存使用率监控预警
如下脚本实现了,当服务器内存使用率超过90%时,提示保存日志操作,如果未超过90%,则不作任何处理;
实现效果展示:
4.3 后台服务启动/停止/重启脚本
对于一些小范围使用,暂未接入j-one部署的服务器,每次后台服务代码更新,代码部署都是一项比较繁琐的工作,而这就到了shell发挥威力的时候了。
执行启动服务时判断服务是否正在启动中;
执行停止服务时判断根据交互条件筛选出的服务是否只有一个;
执行重启服务时判断服务是否正在启动中;
保证中间所有交互过程中的唯一性,避免失误将其他人的服务停止。
实现脚本如下:
实现效果展示:
该脚本可在团队内部通用,只需要输入任务类型编号和对应任务关键字两步即可,脚本在执行过程中会自动提示你确认执行任务对象是否正确,以免误伤;
3)重启服务
4.4 函数化封装
服务部署目录创建 服务配置部署 服务应用部署 服务应用启动
则该四个步骤可以通过shell脚本封装为四个函数,如下:
05
结语
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
综上,linux服务器上,所有的重复性工作都可以交给Shell来打理,日常工作中增加一个万能助手,何乐而不为呢 ?
Shell脚本小巧且功能强大,以上只是给大家分享了些日常使用到的脚本,其他功能大家也可以举一反三,通过各种流程控制组合来实现,让Shell来帮助做工具人,工程师就可以腾出更多的时间来做更重要且更有意义的事情了,与君共勉。
通过自动化单元测试的形式守护系统架构手把手教你实战TDD
求分享
求点赞
求在看