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

作者:京东物流 李光新

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

原文链接:https://www.cnblogs.com/Jcloud/p/17337156.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Shell在日常工作中的应用实践 - Python技术站

(0)
上一篇 2023年4月20日
下一篇 2023年4月18日

相关文章

  • C 运算符

    C 运算符是用于执行特定数学或逻辑操作的特殊符号。在程序中,使用这些运算符来计算表达式的值。下面是一些常用的 C 运算符: 算术运算符 加法运算符(+) 减法运算符(-) 乘法运算符(*) 除法运算符(/) 取模运算符(%) 这些算术运算符用于执行基本的数学运算。例如: int a = 10; int b = 20; int c = a + b; print…

    C 2023年5月10日
    00
  • C语言实现简单的贪吃蛇游戏

    C语言实现简单的贪吃蛇游戏 概述 贪吃蛇是一款非常经典的游戏,很多初学者希望用C语言来实现这个小游戏,来体验C语言的基本语法和编程思路。本文将详细讲解如何使用C语言实现简单的贪吃蛇游戏。 游戏规则 游戏中,玩家操作一只“蛇”来吃食物,当蛇头碰到蛇身或者墙壁时游戏结束。游戏中蛇的长度会随着吃掉的食物而增加,而玩家需要使蛇尽可能地长,同时避免碰到自己的身体或者墙…

    C 2023年5月23日
    00
  • Lua中对table排序实例

    Lua中对table排序是一项非常重要的操作,本文将详细介绍如何在Lua中对table进行排序。 Lua中对table排序的方式 Lua中对table进行排序有两种方式,一种是使用table.sort()函数进行排序,另一种是使用自定义排序函数进行排序。 使用table.sort()函数进行排序 table.sort()函数是Lua自带的排序函数,它可以对t…

    C 2023年5月23日
    00
  • thinkphp下MySQL数据库读写分离代码剖析

    下面是“thinkphp下MySQL数据库读写分离代码剖析”的完整攻略,包含了步骤、示例代码和注意点。 步骤 1. 安装MySQL主从复制 首先,需要安装MySQL主从复制功能,将主服务器的数据同步到从服务器,实现读写分离。 2. 配置主从服务器 在主服务器和从服务器中,分别配置MySQL的主从关系和各自的配置文件。在配置文件中,需要设置数据库的用户名、密码…

    C 2023年5月23日
    00
  • Java8 ArrayList之forEach的使用

    下面我将为你详细讲解“Java8 ArrayList之forEach的使用”的完整攻略。 1. Java8 ArrayList的使用 在Java中,ArrayList是一种常见的集合类型,它继承自List接口,可以存储多个元素,并且支持动态数组的特性,可以自动扩容。下面是ArrayList的定义: public class ArrayList<E&gt…

    C 2023年5月23日
    00
  • Java编程二项分布的递归和非递归实现代码实例

    Java编程二项分布的递归和非递归实现攻略 什么是二项分布? 二项分布是离散分布中的一种,描述了在n次独立重复进行相同的随机实验中,恰好出现k次成功的概率。在很多领域中得到广泛的应用,例如统计学、质量控制、信号处理等等。 二项分布是由n和p两个参数所决定,其中n表示实验的次数,p表示每次实验成功的概率。用数学公式表示为: $$ P(X = k) = \bin…

    C 2023年5月22日
    00
  • C++三色球问题描述与算法分析

    下面是详细讲解C++三色球问题的完整攻略: 问题描述 假设有n个球,其中有红、黄、蓝三种颜色的球,每种颜色至少有一个球。将这n个球排成一列,并记下它们的颜色序列。请问,有多少种不同的颜色序列方式? 算法分析 可以使用递归算法来解决这个问题。 我们可以把球分为两个部分,第一个和剩下的n-1个。那么就可以先求出剩下的n-1个球的颜色排序,然后将第一个球插入到所有…

    C 2023年5月22日
    00
  • Dev-C++调试方法的具体使用

    当使用Dev-C++进行C/C++项目开发时,我们可能会遇到一些问题,如程序崩溃、变量值不正确等。这时候我们就需要使用Dev-C++的调试功能来定位问题。下面是具体使用步骤: 1. 启用调试模式 首先,我们需要在编译选项中启用调试模式。在菜单栏中选择“项目”-“选项”-“编译器”-“调试”选项卡,勾选“生成调试信息”和“生成调试版代码”,然后点击“确定”按钮…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部