首页 > 系统相关 >shell脚本的使用

shell脚本的使用

时间:2023-06-10 11:56:00浏览次数:29  
标签:脚本 shell Linux build 使用 镜像 docker

shell脚本,是一种编程语言,是用户使用Linux的工具。一个shell脚本也可以理解为一系列Linux命令的组合。可以用于各种自动化任务、复杂的任务。

Linux的Shell种类众多,常见的有Bash,Bash在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell。

shell基础教程见:shell教程

先看一个例子,这个例子是eblog中用于构建后端mariadb的初始化镜像。构建镜像很简单,使用docker build即可,麻烦的是需要给镜像取一个有意义,区分度好的名称。例如,镜像名称需要包含:

  • 项目名称
  • 镜像类型
  • 系统版本
  • 代码分支
  • 镜像生成时间
  • 使用的代码commitID

这些信息大部分都是动态实时获取的,这就需要在构建镜像时自动获取。shell脚本能很好的处理这类事情。

#!/bin/bash

# 项目信息
version="v1.0"

function build_image()
{
    echo "进入mariadb init制作镜像目录:"$(pwd)

    latest_commit_id=$(git rev-parse --short HEAD)
    branch=$(git symbolic-ref --short -q HEAD)
    time=$(date "+%Y%m%d_%H%M%S")
    tag=$version"_"$branch"_"$time"_"$latest_commit_id
    docker_name=$1"_mariadb_init:"$tag

    sudo docker build -t $docker_name .
}

各行代码解释如下:

  • #! 指定使用哪种解释器执行脚本,例如这里使用/bin/bash
  • 全局变量可以定义在文件开始,这里定义了系统的版本号
  • 这里定义了一个函数build_image,用于构建镜像,其他脚本可以调用此函数
  • echo用于打印信息
  • 使用$()执行并获取括号中命令的值,例如$(pwd)执行了pwd获取了当前路径,再将结果作为参数输出
  • 获取代码分支和最后提交id,使用了git的命令,当然运行环境需要安装git
  • $用于获取已经定义的变量,或者获取输入的变量,例如$1获取第一个输入的变量,依次类推
  • 字符串的拼接直接将待拼接的字符串写到一起即可
  • 最后调用```docker build``命令生成镜像

当然,其他各种Linux命令都可以写

函数build_image在其他项目中如何调用?再看另外一个shell脚本:docker_build.sh

#!/bin/bash

# 项目信息
db_name="eblog_post"

# 引入脚本
source ../../shell/docker_build_init.sh

# 调用引入脚本中方法
build_image $db_name

这里定义了变量db_name,再引入上面说到的打镜像脚本,再调用引入脚本中的方法,传入参数。

在Linux终端中执行./docker_build.sh命令,即可生成镜像

标签:脚本,shell,Linux,build,使用,镜像,docker
From: https://www.cnblogs.com/leanfish/p/17471016.html

相关文章

  • 移动端H5前端性能优化脚本执行优化
    移动端+HTML5,这个组合对前端工程师来说是个不小的挑战:如何让开发的页面能有更好的体验?这就是我们今天讨论的话题:移动端HTML5页面前端性能优化。如何优化HTML5在移动设置上的性能表现,首先需要明确以下几个原则:1、PC优化手段在Mobile端同样适用。2、在Mobile侧我们提出三秒种渲染完......
  • 云原生之使用Docker部署Laverna笔记工具
    (云原生之使用Docker部署Laverna笔记工具)一、Laverna介绍Laverna是一个开源的、用JavaScript编写的笔记网络应用程序,可以部署在个人服务器上使用。二、检查本地环境状态1.检查系统版本[root@server001~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"......
  • 【Kubernetes的Knative Servina、Knative Eventing 核心概念及Broker、Channel and Tr
    Knative是一个构建在Kubernetes上的平台,它提供了一些高级别的抽象,简化了构建和管理云原生应用程序的过程。其中,KnativeServing用于自动管理应用程序的版本和流量分发,让开发者只需要专注于代码编写;KnativeEventing为云原生应用程序提供了事件驱动的能力,支持事件的生产、转换和消费......
  • SkyWalking分布式链路追踪工具的基本使用
    下载我们需要一个监控中心,还有一个javaagents工具apache-skywalking-apm(显示/存储多个程序的指标数据),APM是ApplicationPerformanceManagement的缩写和skywalking-agent(收集单个程序的指标数据)启动Skywalking和java程序apache-skywalking-apm\bin\startup.bat......
  • 使用NLPAUG 进行文本数据的扩充增强
    在机器学习中,训练数据集的质量在很大程度上决定了模型的有效性。我们往往没有足够的多样化数据,这影响了模型的准确性。这时数据增强技术就派上了用场。数据增强可以通过添加对现有数据进行略微修改的副本或从现有数据中新创建的合成数据来增加数据量。这种数据扩充的方式在CV中十......
  • 树莓派和esp8266之间使用tcp协议通信
     树莓派代码:fromflaskimportFlask,render_templateimportsocketimportthreadingapp=Flask(__name__)adc_value=0#接收tcp数据defreceive_tcp_data():globaladc_value#从ESP8266接收ADC数据sock=socket.socket(socket.AF_INET,socket......
  • Eureka注册中心的使用
    简单介绍:Eureka能够自动注册并发现微服务,然后对服务的状态、信息进行集中管理,这样当我们需要获取其他服务的信息时,我们只需要向Eureka进行查询就可以了。首先在工程中搭建一个Eureka服务器只需要创建一个新的Maven项目即可需要父工程有SpringCloud依赖,如果没有添加依......
  • 用户代理使用
    简介UserAgentUtils是JavaWeb项目中一个非常常用的工具库,用于解析用户浏览器的User-Agent字符串,以获取所访问的设备类型、操作系统类型和版本、浏览器类型和版本等信息。依赖<dependency><groupId>eu.bitwalker</groupId><artifactId>User......
  • Vue——vuex使用、Router使用、localstorage、sessionstorage和cookie
    vuex使用#vuex:状态管理器---》存数据(变量)的地方,所有组件都可以操作在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信<h1>1vuex的使用基本使用(操作state的数据)</h1>......
  • 你以为搞个流水线每天跑,团队就在使用CI/CD实践了?
    在实践中,很多团队对于DevOps流水线没有很透彻的理解,要不就创建一大堆流水线,要不就一个流水线通吃。实际上,流水线的设计和写代码一样,需要基于“业务场景”进行一定的设计编排,特别是很多通过“开源工具”搭建的流水线,更需要如此(商业的一体化平台大部分已经把设计思想融入自己产品里......