作者:京东物流 李光新

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来帮我们做工具人,我们就可以腾出更多的时间来做更重要且更有意义的事情了,与君共勉。

Shell在日常工作中的应用实践的更多相关文章

  1. 博主日常工作中使用的shell脚本分享

    前言: 今天给大家分享一篇在我工作中常用的一个shell脚本,里面有一些我们常用到的shell操作.该脚本用于本地电脑和服务器交互上,实现以下功能: 自动拉取自己个人电脑上的源码到服务器上yocto包 ...

  2. 关于git你日常工作中会用到的一些东西

    前言 git是一个版本控制工具, 版本控制主要的好处有三点: 从当前版本回退到任意版本 查看历史版本 对比两个版本差异 git 相关术语 repository 仓库 branch 分支 summary ...

  3. 程序猿的日常——工作中常用的Shell脚本

    工作当中总是会有很多常用的linux或者命令,这里就做一个总结 文件远程拷贝 如果想把文件从本机拷贝到远程,或者从远程下载文件到本地. # 把本地的jar拷贝到远程机器xxxip的/home/sour ...

  4. Git 日常工作中使用的命令记录

    前言   这篇文章主要是介绍我在使用Git中的有一些忘记了,但是很重要的命令. 20190424 Git 历史信息 username 和 email 更改 git config alias.chang ...

  5. 日常工作中VBA代码积累

    1.超链接地址提取 Function GetURL(rng As Range) As String On Error Resume Next GetURL = rng.Hyperlinks(1).Ad ...

  6. 日常工作中的点滴:C# 根据字节长度截包含中文的字符串

    方法中利用正则表达式判断某个字符是否是中文 public string SubStringB(string text,int length){ int target=0; int b=0; for(i ...

  7. 日常工作中的点滴总结from 2014-03

    一 关于 写方案: 写某个产品的方案基本应包括以下几点: 1产品目前现状(国内外)  2产品意义.作用 3产品架构 4产品优势 5产品功能讲解 二 关于 处理下属工作方向不正确的事务 首先 先肯定 下 ...

  8. 日常工作中使用的一些Mongodb语句

    .通过_userID字段查询重复录入内容 > db.template.aggregate({}}},{$}}) .查询 db.template.find({"group_7ee1247 ...

  9. 日常工作中常见的mysql优化技巧

    1.介绍一下MYSQL经常使用的优化技巧. MySQL 自带 slow log 的分析工具 mysqldumpslow ,可是没有说明.本文通过分析该脚本,介绍了其用法. slow log 是 MyS ...

  10. 日常工作中 Oracle12c参数的处理:

    1. Oracle12c 修改过的参数 alter system set result_cache_mode=manual; alter system ; alter system set " ...

随机推荐

  1. django_ORM基础字段和选项

    一.修改ORM 1.任何关于表结构的修改,务必在对应模型类上修改. 2.在上一篇博文中,创建了bookstore_book表,如果需要再添加一个名为info(varchar 100)的字段,则需要如下 ...

  2. win10启动和安装nacos服务

    https://blog.csdn.net/tbmingzhao/article/details/113276845

  3. JS数组创建

    1.使用Array构造函数 var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(10); // 创建一个包含10项的数组 var arr3 = ...

  4. Rfost的自我介绍+软工五问

    自我介绍+软工五问 问题 解答 这个作业属于哪个课程 网工1934-软件工程 这个作业要求在哪里 作业要求 这个作业的目标 让学生对软件工程有个初步的了解,同时掌握基础的markdown语法和博客园的 ...

  5. 去除python中数据的0值

    import numpy as np a = [0, 1, 2] a = np.array(a) a = a[a != 0].tolist() print(a) //a = [1, 2]

  6. 华为云服务器搭建FTP后,内网访问无法连接。

    总结:1.内网访问公网需要用被动模式 2.云服务器需要放开除20.21以外的部分端口,指定范围 3.PASV IP配置为云服务器的弹性公网IP 4.局域网使用主动模式连接FTP,客户端需要关闭防火墙, ...

  7. 联想拯救者R9000P风扇拉满加强散热的方法

    管软可以开野兽模式,但是风扇还不是最猛的.锻炼的时候为了保护硬件,牺牲风扇和噪音吧,方法如下:下载 RWEverything运行RW.exe点击笔记本图标+EC文字的图案 修改:B0+0D对应的数据, ...

  8. 【MSSQL】远程打开对象

    opendatasource https://docs.microsoft.com/zh-cn/sql/t-sql/functions/opendatasource-transact-sql?view ...

  9. PointGNN未修改之前的结果 ---行人,骑行者

    dl 18 23

  10. conda使用杂记

    总纲 https://docs.anaconda.com/anaconda/navigator/ 其中有链接 miniconda https://docs.anaconda.com/anaconda/ ...