news 2026/5/23 16:03:54

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/5/23 12:14:37

EPUBCheck终极指南:快速验证电子书合规性的免费工具

EPUBCheck终极指南&#xff1a;快速验证电子书合规性的免费工具 【免费下载链接】epubcheck The conformance checker for EPUB publications 项目地址: https://gitcode.com/gh_mirrors/ep/epubcheck EPUBCheck是W3C维护的免费开源工具&#xff0c;专为验证EPUB电子书文…

作者头像 李华
网站建设 2026/5/21 1:14:29

DKVideoPlayer终极指南:解锁安卓视频播放的无限可能

DKVideoPlayer终极指南&#xff1a;解锁安卓视频播放的无限可能 【免费下载链接】DKVideoPlayer Android Video Player. 安卓视频播放器&#xff0c;封装MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音并实现预加载&#xff0c;列表播放&#xff0c;悬浮播放&#xff0c;广告播放…

作者头像 李华
网站建设 2026/5/23 16:03:02

OpenCopilot与Slack深度集成:5步实现团队智能化协作革命

OpenCopilot与Slack深度集成&#xff1a;5步实现团队智能化协作革命 【免费下载链接】OpenCopilot &#x1f916; &#x1f525; AI Copilot for your own SaaS product. Shopify Sidekick alternative. 项目地址: https://gitcode.com/gh_mirrors/op/OpenCopilot 还在为…

作者头像 李华
网站建设 2026/5/23 16:03:00

实战指南:5步将技术项目转化为商业价值的完整路径

实战指南&#xff1a;5步将技术项目转化为商业价值的完整路径 【免费下载链接】chinese-independent-developer 分享中国独立开发者们正在进行的工作和项目的列表。 项目地址: https://gitcode.com/GitHub_Trending/ch/chinese-independent-developer 你是否也曾困惑&am…

作者头像 李华
网站建设 2026/5/23 0:15:48

Unity Asset Usage Detector:三分钟掌握项目资源引用分析

Unity Asset Usage Detector&#xff1a;三分钟掌握项目资源引用分析 【免费下载链接】UnityAssetUsageDetector Find usages of the selected asset(s) and/or Object(s) in your Unity project, i.e. list the objects that refer to them 项目地址: https://gitcode.com/g…

作者头像 李华
网站建设 2026/5/20 17:58:29

shadPS4终极指南:7个让你的PC变身PS4的简单技巧

shadPS4是一个用C编写的跨平台PlayStation 4模拟器&#xff0c;支持在Windows、Linux和macOS系统上运行PS4游戏。作为仍在积极开发中的项目&#xff0c;它让玩家能够在个人电脑上重温经典游戏体验。 【免费下载链接】shadPS4 shadPS4 是一个PlayStation 4 模拟器&#xff0c;支…

作者头像 李华