作者:京东物流李光新

1 Shell能够帮咱们做什么

作为一名测试开发工程师,在与linux服务器交互进程中,大都遇到过以下这些问题:

•一次申请多台服务器,多台服务器需求装置相同软件,装备相同的环境,相同的操作需求重复多次;

•作业中经常会运用指令行指令来完成咱们的一些操作,但是有些指令运用率很高,而且很长,每次都全部敲进去势必会浪费许多时刻(比方查日志)

久而久之,以上两个问题或许会导致:重复性作业,个人能力得不到任何进步,浪费时刻,而且还简略出错,作为一名技术人员,当同一个操作重复了三次,咱们就应该考虑是否能够经过工具来帮咱们完成。

而shell脚本正好拿手,把复杂问题分解成简略的小问题,然后再把各个部分功用组合起来处理复杂问题。 当然,有些指令咱们只能节约三五秒的时刻,短期看不到时刻的节约,但是从长期来看这个价值将是巨大的。咱们能够将这些时刻专注于更有意义,更重要的工作 – 进步生命质量。

2 功用介绍

Shell脚本语言的优势在于处理偏操作体系底层的事务,例如,Linux体系内部许多使用是用shell脚本语言开发的,因为有很多的Linux体系指令为它作支撑,特别是Linux正则表达式和三剑客grep、awk、sed等指令。

关于一些常见的体系脚本,运用shell开发会更简略、更快速。就像让软件一键主动化装置、优化,监控报警脚本,软件发动脚本,日志剖析脚本等,虽然PHP和Python语言也能做到这些,但是因为把握难度、开发效率和开发习惯等,或许就不如shell脚本语言盛行及有优势了。

shell是一个C语言编写的脚本语言,它是用户与linux的桥梁,用户输入指令交给shell来处理,shell将相应的操作传递给内核,内核把处理的结果输出给用户。

可参阅如下流程示意图:

Shell在日常工作中的应用实践

简略来说:shell就是一个用户跟操作体系之间交互的指令解说器

3 根本用法

下面首要来介绍下日常运用较多的根本指令:

3.1 文件仿制

Shell在日常工作中的应用实践

3.2 文件兼并

有时候,要遇到将多个文件兼并成一个的需求,除了重复的仿制和张贴,还能够经过简略指令来辅佐完成。

cat指令

默许地,cat指令能够直接接收多个参数,这样,经过重定向能够很方便地兼并文件:

作用如下:

Shell在日常工作中的应用实践

Shell在日常工作中的应用实践

4 案例共享

4.1 主动添加注释

下面咱们从日常作业入手,和我们一起来看下,shell有哪些进步作业效率的使用场景~

首要,咱们编写的脚本有时候并不仅仅是咱们个人运用,或许是团队内部运用,所以通常在脚本正式编写前,通常需求添加部分注释,注明脚本的作用,创立日期,创立人等信息;

而假如编写脚本比较多的话,这些重复性作业就会成为咱们的负担,所以,咱们又能够将这些交给shell来帮咱们完成,用shell脚本来处理创立shell脚本的重复性作业

下面给我们共享一个shell脚本的模板文件,把它仿制到用户的根目录下并命名成 .vimrc 名称,这样咱们以后再次翻开以 .sh结尾的文件时就会成主动生成一些注释信息,只要稍稍修改一下即可如图所示:

vimrc文件是vim的环境设置文件,在发动vim时,当前用户根目录下的.vimrc文件会被主动读取,该文件能够包含一些设置乃至脚本,所以,一般会在.vimrc文件中根据个人喜爱进行一些自定义设置;

下面脚本我都注释了详细含义,可参阅:

Shell在日常工作中的应用实践

完成作用展现:

Shell在日常工作中的应用实践

4.2 内存运用率监控预警

日常作业中,经常会遇到因为服务器被日志打满而不得不重启的场景,而关于一些必要的单据,就需求时常注意日志的备份,所以能够编写如下一个脚本,来做提醒;

如下脚本完成了,当服务器内存运用率超越90%时,提示保存日志操作,假如未超越90%,则不作任何处理;

Shell在日常工作中的应用实践

完成作用展现:

Shell在日常工作中的应用实践

4.3 后台服务发动/中止/重启脚本

关于一些小范围运用,暂未接入j-one布置的服务器,每次后台服务代码更新,代码布置都是一项比较繁琐的作业,而这就到了shell发挥威力的时候了。

完成原理就是,将中止服务和发动服务需求履行的指令写进脚本,经过shell交互来完成,外加一些必要的判别逻辑,比方:

1.履行发动服务时判别服务是否正在发动中;

2.履行中止服务时判别根据交互条件筛选出的服务是否只要一个;

3.履行重启服务时判别服务是否正在发动中;

4.确保中间一切交互进程中的唯一性,防止失误将其他人的服务中止

完成脚本如下:

Shell在日常工作中的应用实践

完成作用展现:

该脚本可在团队内部通用,只需求输入使命类型编号和对应使命关键字两步即可,脚本在履行进程中会主动提示你确认履行使命对象是否正确,避免误伤;

1)中止服务

Shell在日常工作中的应用实践

2)发动服务:

Shell在日常工作中的应用实践

3)重启服务

Shell在日常工作中的应用实践

大大减少了团队服务布置的作业量~

4.4 函数化封装

关于一些比较复杂的功用,或许需求多次履行的功用,shell也支撑将功用封装为函数,直接履行函数即可;

比方服务器的布置根本能够分为以下几个过程:

•服务布置目录创立

•服务装备布置

•服务使用布置

•服务使用发动

则该四个过程能够经过shell脚本封装为四个函数,如下:

Shell在日常工作中的应用实践

将每个模块编写为函数,最终,只需求调用main函数,即可履行上述一系列操作;

以此类推,装置nginx,Java,jenkins等各种软件操作,也能够封装成多个函数,完成主动化一键完成~

5 结语

综上,linux服务器上,一切的重复性作业都能够交给shell来打理,日常作业中添加一个全能助手,何乐而不为呢

shell脚本小巧且功用强大,以上仅仅给我们共享了些日常运用到的脚本,其他功用我们也能够举一反三,经过各种流程控制组合来完成,让shell来帮咱们做工具人,咱们就能够腾出更多的时刻来做更重要且更有意义的工作了,与君共勉。

本文正在参与「金石方案」