作者:京东物流 李光新

1 Shell能够帮咱们做什么

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

•一次申请多台服务器,多台服务器须要装置雷同软件,配置雷同的环境,同样的操作须要反复屡次;

•工作中常常会应用命令行命令来实现咱们的一些操作,然而有些命令使用率很高,而且很长,每次都全副敲进去势必会节约很多工夫(比方查日志)

长此以往,以上两个问题可能会导致:重复性工作,集体能力得不到任何进步,浪费时间,而且还容易出错,作为一名技术人员,当同一个操作反复了三次,咱们就应该思考是否能够通过工具来帮咱们实现。

而shell脚本正好善于,把简单问题分解成简略的小问题,而后再把各个局部性能组合起来解决简单问题。 当然,有些命令咱们只能节俭三五秒的工夫,短期看不到工夫的节俭,然而从长期来看这个价值将是微小的。咱们能够将这些工夫专一于更有意义,更重要的事件 - 进步生命品质。

2 性能介绍

Shell脚本语言的劣势在于解决偏操作系统底层的业务,例如,Linux零碎外部很多利用是用shell脚本语言开发的,因为有泛滥的Linux系统命令为它作撑持,特地是Linux正则表达式和三剑客grep、awk、sed等命令。

对于一些常见的零碎脚本,应用shell开发会更简略、更疾速。就像让软件一键自动化装置、优化,监控报警脚本,软件启动脚本,日志剖析脚本等,尽管PHP和Python语言也能做到这些,然而因为把握难度、开发效率和开发习惯等,可能就不如shell脚本语言风行及有劣势了。

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

可参考如下流程示意图:

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

3 根本用法

上面首先来介绍下日常应用较多的根本指令:

3.1 文件拷贝

3.2 文件合并

有时候,要遇到将多个文件合并成一个的需要,除了反复的复制和粘贴,还能够通过简略指令来辅助实现。

cat命令

默认地,cat命令能够间接接管多个参数,这样,通过重定向能够很不便地合并文件:

成果如下:

4 案例分享

4.1 主动增加正文

上面咱们从日常工作动手,和大家一起来看下,shell有哪些进步工作效率的利用场景~

首先,咱们编写的脚本有时候并不仅仅是咱们集体应用,可能是团队外部应用,所以通常在脚本正式编写前,通常须要增加局部正文,注明脚本的作用,创立日期,创建人等信息;

而如果编写脚本比拟多的话,这些重复性工作就会成为咱们的累赘,所以,咱们又能够将这些交给shell来帮咱们实现,用shell脚本来解决创立shell脚本的重复性工作

上面给大家分享一个shell脚本的模板文件,把它拷贝到用户的根目录下并命名成 .vimrc 名称,这样咱们当前再次关上以 .sh结尾的文件时就会成主动生成一些正文信息,只有稍稍批改一下即可如图所示:

vimrc文件是vim的环境设置文件,在启动vim时,以后用户根目录下的.vimrc文件会被主动读取,该文件能够蕴含一些设置甚至脚本,所以,个别会在.vimrc文件中依据集体爱好进行一些自定义设置;

上面脚本我都正文了具体含意,可参考:

实现成果展现:

4.2 内存使用率监控预警

日常工作中,常常会遇到因为服务器被日志打满而不得不重启的场景,而对于一些必要的单据,就须要时常留神日志的备份,所以能够编写如下一个脚本,来做揭示;

如下脚本实现了,当服务器内存使用率超过90%时,提醒保留日志操作,如果未超过90%,则不作任何解决;

实现成果展现:

4.3 后盾服务启动/进行/重启脚本

对于一些小范畴应用,暂未接入j-one部署的服务器,每次后盾服务代码更新,代码部署都是一项比拟繁琐的工作,而这就到了shell施展威力的时候了。

实现原理就是,将进行服务和启动服务须要执行的命令写进脚本,通过shell交互来实现,外加一些必要的判断逻辑,比方:

1.执行启动服务时判断服务是否正在启动中;

2.执行进行服务时判断依据交互条件筛选出的服务是否只有一个;

3.执行重启服务时判断服务是否正在启动中;

4.保障两头所有交互过程中的唯一性,防止失误将其他人的服务进行

实现脚本如下:

实现成果展现:

该脚本可在团队外部通用,只须要输出工作类型编号和对应工作关键字两步即可,脚本在执行过程中会主动提醒你确认执行工作对象是否正确,免得误伤;

1)进行服务

2)启动服务:

3)重启服务

大大减少了团队服务部署的工作量~

4.4 函数化封装

对于一些比较复杂的性能,或者须要屡次执行的性能,shell也反对将性能封装为函数,间接执行函数即可;

比方服务器的部署根本能够分为以下几个步骤:

•服务部署目录创立

•服务配置部署

•服务利用部署

•服务利用启动

则该四个步骤能够通过shell脚本封装为四个函数,如下:

将每个模块编写为函数,最初,只须要调用main函数,即可执行上述一系列操作;

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

5 结语

综上,linux服务器上,所有的重复性工作都能够交给shell来打理,日常工作中减少一个万能助手,何乐而不为呢

shell脚本玲珑且功能强大,以上只是给大家分享了些日常应用到的脚本,其余性能大家也能够触类旁通,通过各种流程管制组合来实现,让shell来帮咱们做工具人,咱们就能够腾出更多的工夫来做更重要且更有意义的事件了,与君共勉。