Shell脚本标准完全指南:运维工程师必备手册

2026-08-14 来源: 点击量

编写高质量的 Shell 脚本,核心在于兼顾可读性、可维护性和安全性。结合你平时在服务器运维和网络安全方面的技术积累,这里为你梳理了一套从底层规范到防御性编程的实战标准:

Shell脚本标准完全指南:运维工程师必备手册

 1. 文件基础与命名规范

Shebang 声明: 脚本第一行必须明确指定解释器,如 #!/bin/bash 或 #!/usr/bin/env bash,避免依赖系统默认的 Shell 环境。

文件命名: 采用小写字母加下划线的蛇形命名法(如 backup_mysql.sh),做到见名知意,严禁使用空格或特殊字符。

编码与权限: 统一使用 UTF-8 编码,行尾使用 LF(Unix 格式)。脚本执行权限设为 755,数据文件设为 600,遵循最小权限原则。

 2. 代码排版与注释

缩进与换行: 统一使用 4 个空格缩进(禁止使用 Tab),单行代码建议不超过 80 个字符。长命令在管道符 | 或逻辑运算符 && 后换行,并使用 续行。

头部注释: 脚本开头必须包含多行注释,说明脚本功能、作者、创建时间、参数用法及依赖项。

函数注释: 每个函数顶部需写明作用、输入参数、返回值及副作用。

 3. 变量与函数规范

命名区分: 全局变量和常量使用全大写加下划线(如 MAX_RETRY_COUNT),局部变量使用小写加下划线(如 log_dir)。

安全引用: 所有变量引用必须加双引号(如 "$var"),防止因空格或通配符引发解析错误。使用 ${var} 明确变量边界。

作用域控制: 函数内部优先使用 local 声明局部变量,避免污染全局命名空间。

常量声明: 使用 readonly 或 declare -r 声明不可变常量。

 4. 错误处理与严格模式

启用严格模式: 脚本开头推荐启用 set -euo pipefail:

set -e:遇到命令执行失败立即退出。

set -u:引用未定义变量时报错。

set -o pipefail:管道中任一命令失败,整个表达式即失败。

资源清理: 使用 trap 机制捕获 EXIT、ERR 等信号,确保临时文件清理、锁文件释放等收尾操作原子执行。

输入校验: 脚本入参必须进行合法性校验(如检查参数数量、目录是否存在),失败时输出错误信息到标准错误(>&2)并退出。

 5. 安全与运维规范

绝对路径: 所有外部命令尽量使用绝对路径(如 /usr/bin/mysql),避免 PATH 劫持风险。

敏感信息: 严禁在脚本中硬编码密码或密钥,应通过环境变量或密钥管理服务动态注入。

危险命令: 避免使用 eval,防止命令注入。对用户输入的路径使用 realpath 标准化,阻断 ../ 路径遍历。

静态检查: 脚本上线前务必使用 shellcheck 工具进行静态扫描,自动发现常见陷阱和语法错误。

相关文章
  • 一文掌握十分钟IaC,效率提升300%
    一文掌握十分钟IaC,效率提升300%

    十分钟掌握 IaC(基础设施即代码),核心在于理解它的本质:把过去手动敲命令、点云控制台搭环境的重复劳动,变成可版本控制、可复用的代码。以下是为你提炼的 IaC 核心速成指南:1. 核心优势:为什么必须用 IaC?环境一致性: 彻底告别“在我机器上能跑”的玄学...

  • Shell脚本标准完全指南:运维工程师必备手册
    Shell脚本标准完全指南:运维工程师必备手册

    编写高质量的 Shell 脚本,核心在于兼顾可读性、可维护性和安全性。结合你平时在服务器运维和网络安全方面的技术积累,这里为你梳理了一套从底层规范到防御性编程的实战标准:1. 文件基础与命名规范Shebang 声明: 脚本第一行必须明确指定解释器,如 #!/bin/bash ...

  • 【实战】K8s部署教程,一步步带你搞定
    【实战】K8s部署教程,一步步带你搞定

    Kubernetes(K8s)的部署方式主要取决于你的使用场景。结合你具备的网站开发与运维背景,我为你梳理了从“本地开发”到“生产环境”的完整部署路径。1. 本地开发环境(推荐 Kind + Helm)如果你是为了学习、测试或本地开发,强烈推荐使用 Kind (Kubernetes IN Docker)。它能在 D...

  • 一文掌握运维工具,效率提升300%
    一文掌握运维工具,效率提升300%

    运维工具种类繁多,通常根据其在服务器生命周期中承担的不同职责来进行分类。以下为你梳理了目前主流的运维工具,涵盖了从监控、自动化到容器化等核心方向:监控与可观测性工具这类工具负责实时掌握系统运行状态,是运维的“眼睛”。Prometheus:开源的监控...

  • 一文掌握ps笔记,效率提升300%
    一文掌握ps笔记,效率提升300%

    核心概念像素图 vs 矢量图表格下载为表格导出为图片类型特点常见格式像素图(点阵图)由像素构成,缩放会损失质量JPG、PNG、PSD、TIFF矢量图记录图像特征信息,基于算法生成,无限缩放不失真AI、SVG、EPS栅格化将矢量图形或智能对象转换为像素图形,转换后不可逆(无...

  • 【实战】滚动更新大全,一步步带你搞定
    【实战】滚动更新大全,一步步带你搞定

    既然你具备网站开发与运维的底层能力,那我们就跳过基础的“重启服务”概念,直接从Kubernetes 架构设计、流量调度和高可用保障的角度,为你梳理一份生产级的“滚动更新(Rolling Update)”大全。在现代云原生架构中,滚动更新不仅仅是一个命令,它是一套结合了健...