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

2023-11-07

作者:京东物流 李光新

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • GNU AWK

    awk awk官方给出的是 pattern scanning and processing language即模式扫描处理语言 我们CentOS一般用的是GNU AWK 官方给出的语法有五种 我们只举例前两种使用格式 下面是语法 gawk
  • 使用java geotools进行坐标转换

    java geotools支持不同的坐标系之间进行转换 只需要转换的时候指定坐标系即可 pom依赖文件如下
  • 现在的00后,实在是太卷了

    现在的小年轻真的卷得过分了 前段时间我们公司来了个00年的 工作没两年 跳槽到我们公司起薪18K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好 一大家子指望他一个人
  • Vulnhub入门实战-Wakanda

    下载链接 描述 1 探测主机的IP地址 2 使用nmap查看靶机开放端口 开放了4个端口 老样子先从http下手 3 进去发现没什么可以点的 于是进行目录扫描 状态码都是200 但是size为0 所以返回的都是空页面 查看主页源代码 发现一
  • Scrapy----Scrapy架构及工作流程

    原文链接 Scrapy Scrapy架构及工作流程 一 Scrapy架构图 scrapy的架构图如下 红色箭头表示工作流程 二 Scrapy的组成 Scrapy Engine Scrapy Engine主要用来协调数据流在Scrap各个组件
  • [蓝桥杯][2014年第五届真题]兰顿蚂蚁

    题目 题目链接 题解 DFS 没什么难的吧 可能实现的时候用时长短 代码简洁程度不同而已 代码 include
  • 《响应式Web设计实践》学习笔记

    第1章 无处不在的Web 1 4 成为响应式的 Ethan Marcotte利用三种已有工具 媒介查询 media queries 流动布局 fluid grids 和自适应图片 scalable images 创建了一个在不同分辨率屏幕下
  • 每日一道基础编程题目(牛客网)--基础编程篇(NO.1)

    文章目录 1 每日一道基础编程题目 牛客网 前言 题目引入 结语 1 每日一道基础编程题目 牛客网 前言 从今天起 我会日更一些编程题目 比较基础的 适合期末复习的题目 分享给大家 和大家一起进步 题目引入 首先我们先看一下这个代码 这个的
  • 邻桌为何一天就学完了SQL基础语法,数据分析必学的SQL,满满硬货

    因为开学原因 导致好久没有更新博客了 谁家大学生一周五天早八 今天这篇分享数据库操作和 SQL SQL 全称是 Structured Query Language 翻译后就是结构化查询语言 是一种数据库查询和程序设计语言 用于存取数据以及查
  • Eclipse SVN 更新报: “is too old(format10,createdbySubversion1.6)”解决方法

    原因 版本太低导致 更新一下就可以了 方法 项目上右键 Team upgrade
  • android 模拟点击localinstrumentation,android通过Instrumentation来模拟键盘点击操作

    android app Instrumentation好像原来是用来做测试的 可以用来模拟很多activity的操作 主要代码如下 package com qefee testinstrumentation import android a
  • 常用git和repo命令

    常用git和repo命令 文章收集了最近使用的一些repo和git命令 下图是个人理解的git文件状态转换图 更详细的Pro git 文档 更准确的应该是这样 相关概念 名称 意义 repo 谷歌用Python脚本写的调用git的一个脚本
  • 自动化测试_49自动化测试中最常见的Selenium异常

    自动化测试 开发人员将始终在编写代码时牢记不同的场景 但是在某些情况下 实现可能无法按预期工作 相同的原则也适用于测试代码 该代码主要用于测试现有产品的功能 发现bug并使产品100 无缺陷 正确地说 真理总是比小说更陌生 当您执行Sele
  • matlab 杨氏双缝干涉实验

    目录 一 算法原理 二 代码实现 三 结果展示 本文由CSDN点云侠原创 原文链接 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 算法原理 杨氏双缝干涉实验是利用分波振面法获得相干光束的典型例子 如图1 所示 在普通单
  • 系列:7、 Kubernetes 安全性

    Kubernetes 安全性 我们将讨论 Kubernetes 安全性 当我们在使用 Kubernetes 时 出于安全原因 我们有时会希望限制网络的访问或限制某些用户查看或运行某些命令等 为此 我们必须使用不同的 Kubernetes 概
  • 探秘app.asar

    开发过Electron客户端的都知道 在package json的build节点下 如果设置 asar true 软件打包时会把程序文件合成为一个app asar文件 软件安装后 可以在安装目录的resources子目录下找到它 packa
  • GitBash:修改GitBash主题配色和字体

    打开GitBash 使用命令 cd 然后 vi minttyrc 使用下列内容替换已有内容 Font Consolas FontHeight 13 ForegroundColour 131 148 150 BackgroundColour
  • 送书【新书】

    文末查看送书规则 Apache ECharts incubating 下文简称ECharts 是由百度捐献给Apache开源软件基金会的一个开源可视化工具 目前广泛应用于PC端和移动端的大部分浏览器 截至本书完稿时 该项目正在Apache开
  • 在Visual Studio 2019中使用Qt5.14.2并配置相关路径(含opencv/halcon)联合编程配置

    1 Qt下载安装 参考链接 https blog csdn net weixin 41977337 article details 106859728 1 QT下载 推荐下载Qt5 12 3版本 5 12为LTS长期支持版本 官方下载链接
  • Shell在日常工作中的应用实践

    作者 京东物流 李光新 1 Shell可以帮我们做什么 作为一名测试开发工程师 在与linux服务器交互过程中 大都遇到过以下这些问题 一次申请多台服务器 多台服务器需要安装相同软件 配置相同的环境 同样的操作需要重复多次 工作中经常会使用