惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
月光博客
月光博客
量子位
大猫的无限游戏
大猫的无限游戏
Stack Overflow Blog
Stack Overflow Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
P
Proofpoint News Feed
B
Blog RSS Feed
美团技术团队
腾讯CDC
C
Check Point Blog
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
Recent Announcements
Recent Announcements
J
Java Code Geeks
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享

博客园 - 瘦鱼

读《下一个倒下的会不会是华为》 读《大明王朝1566》有感 读《骆驼祥子》有感 轻松学-题库 git提交记录合并 缓存 个人项目开发规划 eblog镜像的制作 eblog简介 容器化技术的使用和优缺点 爱收藏网站关闭 0.爱收藏——开篇 “爱收藏”网站再次重启 Linux服务器设置虚拟内存 Linux常用命令 3.爱收藏——系统架构 4.爱收藏——首页搜索功能实现 2.爱收藏——需求说明 1.爱收藏——云端收藏夹发布 GIt帮助文档之忽略某些文件——忽略python虚拟环境文件夹(转)
shell脚本的使用
瘦鱼 · 2023-06-10 · via 博客园 - 瘦鱼

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命令,即可生成镜像