news 2026/9/9 0:33:14

Shell 编程规范 运维脚本模板(建议收藏)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell 编程规范 运维脚本模板(建议收藏)

一、为什么运维必须讲 Shell 规范?

真实事故来源👇

  • rm 少了目录校验

  • 脚本失败却继续执行

  • 日志没打,事后无法追溯

  • 同事接手脚本完全看不懂

📌结论一句话

Shell 脚本 = 代码 代码 = 必须有规范


二、Shell 脚本通用规范(强烈建议)

1️⃣ 必须指定解释器

#!/bin/bash

❌ 禁止省略 ❌ 禁止依赖环境猜测


2️⃣ 开头统一开启安全模式

set -euo pipefail

含义说明:

参数

作用

-e

命令失败立即退出

-u

使用未定义变量直接报错

-o pipefail

管道中任一失败即失败

👉生产脚本强烈建议开启


3️⃣ 脚本必须写说明注释

# ------------------------------------------------------------------
# 脚本名称: backup_mysql.sh
# 功能描述: MySQL 数据库定时备份
# 作者: 运维部
# 创建时间: 2025-xx-xx
# 使用说明: ./backup_mysql.sh
# ------------------------------------------------------------------

📌不是给自己看的,是给“接盘的人”看的


三、变量命名规范(非常重要)

1️⃣ 全局变量:全部大写

BACKUP_DIR="/data/backup"
LOG_FILE="/var/log/backup.log"


2️⃣ 局部变量:小写 + local

backup_db() {
local db_name=$1
}

❌ 禁止函数里直接用全局变量当临时变量


3️⃣ 常量使用 readonly

readonly SCRIPT_NAME=$(basename "$0")


四、路径 & 变量的安全写法

1️⃣ 所有变量都要加引号

rm -rf "$DIR"

❌ 错误写法:

rm -rf $DIR

👉 防止空变量导致误删 /


2️⃣ 重要目录操作前必须校验

[ -d "$BACKUP_DIR" ] || mkdir -p "$BACKUP_DIR"


五、函数使用规范

1️⃣ 所有逻辑必须进函数

❌ 不推荐:

echo "开始备份"
mysqldump ...

✅ 推荐:

main() {
echo "开始备份"
backup_mysql
}


2️⃣ main 函数统一入口

main "$@"

📌让脚本结构一眼就能看懂


六、日志规范(运维脚本灵魂)

1️⃣ 标准日志函数

log() {
echo "$(date '+%F %T') [$1] $2" | tee -a "$LOG_FILE"
}

调用:

log INFO "备份开始"
log ERROR "备份失败"


2️⃣ 禁止裸 echo 关键信息

echo "失败了"

log ERROR "数据库备份失败"


七、错误处理规范

1️⃣ 必须捕获异常退出

trap 'log ERROR "脚本异常退出"; exit 1' ERR


2️⃣ 主动判断关键命令

if ! mysqldump ...; then
log ERROR "mysqldump 执行失败"
exit 1
fi


八、参数校验规范

示例:校验参数个数

if [ $# -ne 1 ]; then
echo "Usage: $0 <backup_dir>"
exit 1
fi

👉永远不要假设用户会正确使用脚本


九、运维通用 Shell 脚本模板(可直接用)

📌这是整篇文章的核心,建议直接收藏

#!/bin/bash
set -euo pipefail

# ================== 基本信息 ==================
SCRIPT_NAME=$(basename"$0")
LOG_FILE="/var/log/${SCRIPT_NAME}.log"
readonly SCRIPT_NAME
readonly LOG_FILE

# ================== 日志函数 ==================
log() {
local level=$1
local msg=$2
echo"$(date '+%F %T') [$level] $msg" | tee -a "$LOG_FILE"
}

# ================== 错误捕获 ==================
trap'log ERROR "脚本执行异常,已退出"; exit 1' ERR

# ================== 功能函数 ==================
check_env() {
log INFO "检查运行环境"
command -v tar >/dev/null || { log ERROR "tar 未安装"; exit 1; }
}

backup_data() {
local src="/data"
local dst="/backup/data_$(date +%F).tar.gz"

log INFO "开始备份 $src"
tar czf "$dst""$src"
log INFO "备份完成:$dst"
}

# ================== 主函数 ==================
main() {
check_env
backup_data
log INFO "脚本执行完成"
}

main "$@"

👉这套结构,适用于 90% 运维脚本


十、生产环境 Shell 编程黄金法则

📌 记住这 5 条:

1️⃣ 所有脚本都能反复执行 2️⃣ 所有关键操作都有日志 3️⃣ 所有变量都有保护 4️⃣ 所有失败都能立刻退出 5️⃣ 所有人接手都能看懂


Shell 编程不是炫技, 而是:稳定、可控、可维护

📌 到这里,你已经具备:

  • 写 Shell 的能力

  • 上线 Shell 的底气

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 5:37:34

Plum 完整指南:Rime 输入法配置管理的终极解决方案

Plum 完整指南&#xff1a;Rime 输入法配置管理的终极解决方案 【免费下载链接】plum 東風破 /plum/: Rime configuration manager and input schema repository 项目地址: https://gitcode.com/gh_mirrors/pl/plum Plum 是专为 Rime 输入法引擎设计的强大配置管理工具&…

作者头像 李华
网站建设 2026/8/29 5:38:40

LZ4极速压缩终极指南:如何实现毫秒级数据处理

LZ4极速压缩终极指南&#xff1a;如何实现毫秒级数据处理 【免费下载链接】lz4 Extremely Fast Compression algorithm 项目地址: https://gitcode.com/GitHub_Trending/lz/lz4 在现代数据处理场景中&#xff0c;LZ4压缩算法以其惊人的速度和效率成为业界标杆。这款高性…

作者头像 李华
网站建设 2026/9/3 23:53:53

2026毕设ssm+vue基于疫情防控的物资管理与发放系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景 关于突发公共卫生事件中物资保障问题的研究&#xff0c;现有研究主要以宏观层面的应急物流、供应链协同及政策建议为主&#…

作者头像 李华
网站建设 2026/9/3 4:24:25

SMP语言基础知识-应用系统,个人开发者的痛点(2)

接上篇 SMP语言基础知识-应用系统&#xff0c;个人开发者的痛点&#xff08;1&#xff09; 三、技术的痛点 1、 吃技术老本 个人开发者出来创业一般都是高手&#xff0c;而高手的特点就是有技术专长。这个长处当然是长处&#xff0c;但是&#xff0c;也可能变为短处&#xff0c…

作者头像 李华
网站建设 2026/8/28 7:37:29

Screen to Gif时间轴编辑功能深度剖析

让 GIF 会说话&#xff1a;Screen to Gif 时间轴编辑的实战智慧你有没有过这样的经历&#xff1f;录完一段操作演示&#xff0c;回放时却发现动画太快、细节看不清&#xff0c;或者中间夹杂着一堆静止画面&#xff0c;节奏像卡顿的幻灯片。这时候&#xff0c;一个能“精雕细琢”…

作者头像 李华