实现功能: - 文件夹和 MySQL 容器数据库备份 - tar.gz 压缩和自动清理旧备份 - systemd 定时任务集成 - 远程一键安装脚本(通过 Gitea 仓库) - 完整的 llmdoc 文档系统 安装方式: bash <(curl -sL https://gitea.bcde.io/wangdefa/docker-backup/raw/branch/main/install.sh) 配置文件位置:/etc/docker-backup/config.yml 命令:docker-backup, docker-backup-cleanup
90 lines
2.5 KiB
Markdown
90 lines
2.5 KiB
Markdown
# Bash 脚本编码约定
|
||
|
||
## 1. 脚本结构约定
|
||
|
||
### 1.1 基本骨架
|
||
- 必须以 `#!/bin/bash` 开头
|
||
- 使用 `set -e` 和 `set -o pipefail` 启用严格错误处理
|
||
- 按照以下顺序组织脚本:
|
||
1. Shebang
|
||
2. 文件描述注释
|
||
3. 变量和常量定义
|
||
4. 日志和颜色输出函数
|
||
5. 主要功能函数
|
||
6. 主函数(`main()`)
|
||
7. 主函数调用
|
||
|
||
### 1.2 错误处理
|
||
- 使用 `set -e` 在任何命令执行失败时立即退出脚本
|
||
- 使用 `set -o pipefail` 确保管道命令链任何一个失败都返回失败状态
|
||
- 对于可能失败的操作,编写明确的错误检查和日志记录机制
|
||
|
||
## 2. 命名约定
|
||
|
||
### 2.1 变量命名
|
||
- 全局变量使用大写,单词间使用下划线分隔
|
||
- 正确: `SCRIPT_DIR`, `DEFAULT_INSTALL_DIR`
|
||
- 局部变量使用小写,单词间使用下划线分隔
|
||
- 正确: `backup_type`, `temp_backup_dir`
|
||
|
||
### 2.2 函数命名
|
||
- 使用小写,单词间使用下划线分隔
|
||
- 动词 + 名词的形式
|
||
- 正确: `install_dependencies()`, `check_root()`
|
||
- 错误: `Dependencies()`, `rootCheck()`
|
||
|
||
## 3. 日志记录约定
|
||
|
||
### 3.1 日志级别
|
||
- 使用以下日志级别函数:
|
||
- `log_info()`: 普通信息
|
||
- `log_warn()`: 警告信息
|
||
- `log_error()`: 错误信息
|
||
|
||
### 3.2 日志输出
|
||
- 日志应包含时间戳
|
||
- 使用颜色区分不同日志级别
|
||
- 日志消息应简洁明了,描述当前操作或状态
|
||
|
||
## 4. 注释风格
|
||
|
||
### 4.1 文件头注释
|
||
- 使用 `###############################################################################`
|
||
- 包含脚本名称和简要功能描述
|
||
|
||
### 4.2 函数注释
|
||
- 在函数定义前使用块注释
|
||
- 描述函数的目的和关键行为
|
||
|
||
### 4.3 行内注释
|
||
- 仅在代码复杂或不明显时使用
|
||
- 解释 "为什么" 而非 "做什么"
|
||
|
||
## 5. 参数和配置处理
|
||
|
||
### 5.1 参数解析
|
||
- 使用 `case` 语句处理命令行参数
|
||
- 提供帮助选项(`-h`, `--help`)
|
||
- 对无效参数给出明确错误提示
|
||
|
||
### 5.2 配置加载
|
||
- 使用配置文件(如 YAML)管理可配置参数
|
||
- 提供合理的默认值
|
||
- 在加载配置时进行有效性检查
|
||
|
||
## 6. 性能和安全最佳实践
|
||
|
||
### 6.1 依赖检查
|
||
- 在脚本开始检查所有必需的外部工具
|
||
- 为缺失的依赖提供明确的安装指导
|
||
|
||
### 6.2 权限管理
|
||
- 对于需要特权的脚本,明确检查 root 权限
|
||
- 谨慎处理文件和目录权限
|
||
|
||
## 7. 示例项目特定约定
|
||
|
||
本项目脚本特有的一些约定:
|
||
- 使用 `BASH_SOURCE[0]` 获取脚本所在目录
|
||
- 支持通过环境变量覆盖默认配置
|
||
- 使用 `trap` 注册清理函数 |