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语言调试和测试的完整攻略: 一、调试 1.使用调试工具 在C语言中进行调试,最常见的工具就是 gdb(GNU Debugger)和 valgrind,可以帮助程序员快速定位代码错误。 gdb是一个强大的命令行调试工具,可以设置断点、查看代码变量值等。使用gdb调试程序,可以通过以…

    C 2023年4月28日
    00
  • Java进阶:JNI使用技巧点滴

    Java进阶: JNI使用技巧点滴 什么是JNI Java Native Interface(JNI)是Java平台的一个重要特性,它允许Java应用程序调用本地(C、C++)应用程序,并且本地应用程序也可以调用Java应用程序。通过JNI,Java程序员可以使用Java的优点和C的优点,实现可以同时具有可移植性和性能的应用程序。 JNI允许在Java虚拟机…

    C 2023年5月23日
    00
  • json转String与String转json及判断对象类型示例代码

    这里是关于”json转String与String转json及判断对象类型示例代码”的详细攻略。 json转String JSON是一种数据格式,在JavaScript中,JSON.stringify()方法可以将一个对象转换为JSON字符串。 const obj = {"name": "Tom", "age&…

    C 2023年5月23日
    00
  • c语言stack(栈)和heap(堆)的使用详解

    C语言 Stack 和 Heap 的使用详解 在C语言中,stack和heap是两种管理内存的方式。了解这两种内存分配的优缺点以及它们的使用方法可以给我们的程序设计带来很多好处。本文将详细讲解stack和heap的用法。 Stack 内存管理 Stack内存管理的定义 Stack是由编译器自动分配和管理的内存区域,其大小可在编译期确定。栈是一种先进后出(LI…

    C 2023年5月23日
    00
  • 详解SQL Server 中 JSON_MODIFY 的使用

    详解SQL Server 中 JSON_MODIFY 的使用 简介 在 SQL Server 2016 中,引入了 JSON 数据类型和一些新的 JSON 函数,其中之一是 JSON_MODIFY,它是一种修改 JSON 数据的函数。 在本文中,我们将详细介绍 JSON_MODIFY 函数的使用方法,包括语法、参数和示例。 语法 JSON_MODIFY 函数…

    C 2023年5月23日
    00
  • C++实现Dijkstra(迪杰斯特拉)算法

    当我们需要在一个带权重的图中找到起始点到目标点的最短路径时,Dijkstra算法是一种较为常见的解决方法。下面,我将为大家详细讲解如何使用C++语言实现Dijkstra算法的完整攻略。 前置知识 在学习本文之前,你需要掌握以下基础知识: C++语言基础 图的基本概念和表示方法 最短路径问题和算法 如果你对上述知识点掌握不够扎实,我建议你先去学习相关基础知识。…

    C 2023年5月22日
    00
  • C语言实现图书管理系统开发

    C语言实现图书管理系统开发攻略 1. 程序设计 图书管理系统是一个比较复杂的系统,需要多个模块进行协同工作,因此我们需要仔细设计整个系统的流程。 1.1 系统流程 在设计图书管理系统时,需要考虑以下几个方面的流程: 图书管理:包括图书的增加、删除、修改和查询等操作; 读者管理:包括读者的信息录入、修改和查询等操作; 借还管理:包括图书的借阅和归还等操作。 1…

    C 2023年5月23日
    00
  • ubuntu 下编译C++代码出现的问题解决

    针对Ubuntu下编译C++代码出现的问题进行解决需要考虑以下几个步骤: 1.更新apt-get,确保系统软件包是最新的 sudo apt-get update sudo apt-get upgrade 2.安装C++编译器和构建工具 sudo apt-get install build-essential sudo apt-get install g++ …

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