用途: 本文档作为提示词模板,用于指导 AI 生成符合生产标准的 Shell 交互式控制面板。
使用方法: 将本文档内容作为提示词提供给 AI,AI 将基于此规格生成完整的控制面板脚本。
请生成一个生产级的 Shell 交互式控制面板脚本,用于管理和控制复杂的软件系统。该控制面板必须满足以下要求:
功能需求:
requirements:
os_detection:
- 自动识别操作系统类型 (Ubuntu/Debian/CentOS/RHEL/macOS)
- 识别系统版本号
- 识别包管理器 (apt-get/yum/dnf/brew)
dependency_check:
- 检查必需依赖: python3, pip3, curl
- 检查推荐依赖: git
- 返回缺失依赖列表
auto_install:
- 提示用户确认安装(交互模式)
- 静默自动安装(--force 模式)
- 调用对应包管理器安装
- 安装失败时提供明确错误信息
venv_management:
- 检测虚拟环境是否存在
- 不存在则创建 .venv/
- 自动激活虚拟环境
- 检查 pip 版本,仅在过旧时升级
- 检查 requirements.txt 依赖是否已安装
- 仅在缺失或版本不匹配时安装依赖
- 所有检查通过则跳过安装,直接进入下一步
关键函数:
detect_environment() # 检测 OS 和包管理器
command_exists() # 检查命令是否存在
check_system_dependencies() # 检查系统依赖
auto_install_dependency() # 自动安装缺失依赖
setup_venv() # 配置 Python 虚拟环境
check_venv_exists() # 检查虚拟环境是否存在
check_pip_requirements() # 检查 requirements.txt 依赖是否满足
verify_dependencies() # 验证所有依赖完整性,仅缺失时触发安装
实现要点:
/etc/os-release 检测 Linux 发行版uname 检测 macOS功能需求:
requirements:
directory_management:
- 检查必需目录: data/, logs/, modules/, pids/
- 缺失时自动创建
- 设置正确的权限 (755)
pid_cleanup:
- 扫描所有 .pid 文件
- 检查进程是否存活 (kill -0)
- 清理僵尸 PID 文件
- 记录清理日志
permission_check:
- 验证关键目录的写权限
- 验证脚本自身的执行权限
- 权限不足时给出明确提示
config_validation:
- 检查 .env 文件存在性
- 验证必需的环境变量
- 缺失时从模板创建或提示用户
safe_mode:
- 初始化失败时进入安全模式
- 只启动基础功能
- 提供修复建议
关键函数:
init_system() # 系统初始化总入口
init_directories() # 创建目录结构
clean_stale_pids() # 清理过期 PID
check_permissions() # 权限检查
validate_config() # 配置验证
enter_safe_mode() # 安全模式
实现要点:
mkdir -p 确保父目录存在kill -0 $pid 检查进程存活功能需求:
requirements:
command_line_args:
options:
- name: --silent / -s
description: 静默模式,无交互提示
effect: SILENT=1
- name: --force / -f
description: 强制执行,自动确认
effect: FORCE=1
- name: --no-banner
description: 不显示 Banner
effect: NO_BANNER=1
- name: --debug / -d
description: 显示调试信息
effect: DEBUG=1
- name: --help / -h
description: 显示帮助信息
effect: print_usage && exit 0
commands:
- start: 启动服务
- stop: 停止服务
- restart: 重启服务
- status: 显示状态
- logs: 查看日志
- diagnose: 系统诊断
execution_modes:
interactive:
- 显示彩色菜单
- 等待用户输入
- 操作后按回车继续
non_interactive:
- 直接执行命令
- 最小化输出
- 返回明确的退出码 (0=成功, 1=失败)
exit_codes:
- 0: 成功
- 1: 一般错误
- 2: 参数错误
- 3: 依赖缺失
- 4: 权限不足
关键函数:
parse_arguments() # 解析命令行参数
print_usage() # 显示帮助信息
execute_command() # 执行非交互命令
interactive_mode() # 交互式菜单
实现要点:
getopts 或手动 while [[ $# -gt 0 ]] 解析参数read 操作CI/CD 集成示例:
# GitHub Actions
./control.sh start --silent --force || exit 1
# Crontab
0 2 * * * cd /path && ./control.sh restart --silent
# Systemd
ExecStart=/path/control.sh start --silent
功能需求:
requirements:
plugin_structure:
directory: modules/
naming: *.sh
loading: 自动扫描并 source
plugin_interface:
initialization:
- 函数名: ${MODULE_NAME}_init()
- 调用时机: 模块加载后立即执行
- 用途: 注册命令、验证依赖
cleanup:
- 函数名: ${MODULE_NAME}_cleanup()
- 调用时机: 脚本退出前
- 用途: 清理资源、保存状态
plugin_registry:
- 维护已加载模块列表: LOADED_MODULES
- 支持模块查询: list_modules()
- 支持模块启用/禁用
plugin_dependencies:
- 模块可声明依赖: REQUIRES=("curl" "jq")
- 加载前检查依赖
- 依赖缺失时跳过并警告
关键函数:
load_modules() # 扫描并加载模块
register_module() # 注册模块信息
check_module_deps() # 检查模块依赖
list_modules() # 列出已加载模块
模块模板:
#!/bin/bash
# modules/example.sh
MODULE_NAME="example"
REQUIRES=("curl")
example_init() {
log_info "Example module loaded"
register_command "backup" "backup_database"
}
backup_database() {
log_info "Backing up database..."
# 实现逻辑
}
example_init
实现要点:
for module in modules/*.sh 扫描source $module 加载功能需求:
requirements:
logging_system:
levels:
- INFO: 一般信息(青色)
- SUCCESS: 成功操作(绿色)
- WARN: 警告信息(黄色)
- ERROR: 错误信息(红色)
- DEBUG: 调试信息(蓝色,需开启 --debug)
output:
console:
- 彩色输出(交互模式)
- 纯文本(非交互模式)
- 可通过 --silent 禁用
file:
- 路径: logs/control.log
- 格式: "时间戳 [级别] 消息"
- 自动追加,不覆盖
rotation:
- 检测日志大小
- 超过阈值时轮转 (默认 10MB)
- 保留格式: logfile.log.1, logfile.log.2
- 可配置保留数量
process_monitoring:
metrics:
- PID: 进程 ID
- CPU: CPU 使用率 (%)
- Memory: 内存使用率 (%)
- Uptime: 运行时长
collection:
- 使用 ps 命令采集
- 格式化输出
- 支持多进程监控
system_diagnostics:
collect_info:
- 操作系统信息
- Python 版本
- 磁盘使用情况
- 目录状态
- 最近日志 (tail -n 10)
- 进程状态
health_check:
- 检查服务是否运行
- 检查关键文件存在性
- 检查磁盘空间
- 检查内存使用
- 返回健康状态和问题列表
关键函数:
# 日志函数
log_info() # 信息日志
log_success() # 成功日志
log_warn() # 警告日志
log_error() # 错误日志
log_debug() # 调试日志
log_message() # 底层日志函数
# 日志管理
rotate_logs() # 日志轮转
clean_old_logs() # 清理旧日志
# 进程监控
get_process_info() # 获取进程信息
monitor_process() # 持续监控进程
check_process_health() # 健康检查
# 系统诊断
diagnose_system() # 完整诊断
collect_system_info() # 收集系统信息
generate_diagnostic_report() # 生成诊断报告
实现要点:
tee -a 同时输出到控制台和文件ps -p $pid -o %cpu=,%mem=,etime= 获取进程信息requirements:
ascii_art:
- 使用 ASCII 字符绘制
- 宽度不超过 80 字符
- 包含项目名称
- 可选版本号
color_scheme:
- 主色调: 青色 (CYAN)
- 强调色: 绿色 (GREEN)
- 警告色: 黄色 (YELLOW)
- 错误色: 红色 (RED)
toggle:
- 支持 --no-banner 禁用
- 非交互模式自动禁用
示例:
╔══════════════════════════════════════════════╗
║ Enhanced Control Panel v2.0 ║
╚══════════════════════════════════════════════╝
requirements:
layout:
- 清晰的分隔线
- 数字编号选项
- 彩色标识(绿色数字,白色文字)
- 退出选项用红色
structure:
main_menu:
- 标题: "Main Menu" 或中文
- 功能选项: 1-9
- 退出选项: 0
sub_menu:
- 返回主菜单: 0
- 面包屑导航: 显示当前位置
interaction:
- read -p "选择: " choice
- 无效输入提示
- 操作完成后 "按回车继续..."
示例:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1) Start Service
2) Stop Service
3) Show Status
0) Exit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
requirements:
start_service:
process:
- 检查服务是否已运行
- 已运行则提示并退出
- 启动后台进程 (nohup ... &)
- 保存 PID 到文件
- 验证启动成功
- 输出日志路径
error_handling:
- 启动失败时清理 PID 文件
- 记录错误日志
- 返回非零退出码
stop_service:
process:
- 读取 PID 文件
- 检查进程是否存在
- 发送 SIGTERM 信号
- 等待进程退出 (最多 30 秒)
- 超时则发送 SIGKILL
- 删除 PID 文件
error_handling:
- PID 文件不存在时提示
- 进程已死但 PID 存在时清理
restart_service:
process:
- 调用 stop_service
- 等待 1-2 秒
- 调用 start_service
status_check:
display:
- 服务状态: Running/Stopped
- PID (如果运行)
- CPU 使用率
- 内存使用率
- 运行时长
- 日志文件大小
- 最后一次启动时间
requirements:
location: data/ 或 pids/
naming: service_name.pid
content: 单行纯数字 (进程 ID)
operations:
create:
- echo $! > "$PID_FILE"
- 立即刷新到磁盘
read:
- pid=$(cat "$PID_FILE")
- 验证是否为数字
check:
- kill -0 "$pid" 2>/dev/null
- 返回 0 表示进程存活
cleanup:
- rm -f "$PID_FILE"
- 记录清理日志
project_root/
control.sh # 主控制脚本(本脚本)
modules/ # 可选插件目录
database.sh # 数据库管理模块
backup.sh # 备份模块
monitoring.sh # 监控模块
data/ # 数据目录
*.pid # PID 文件
*.db # 数据库文件
logs/ # 日志目录
control.log # 控制面板日志
service.log # 服务日志
.venv/ # Python 虚拟环境(自动创建)
requirements.txt # Python 依赖(如需要)
.env # 环境变量(如需要)
requirements:
shebang: "#!/bin/bash"
strict_mode:
- set -e: 遇到错误立即退出
- set -u: 使用未定义变量报错
- set -o pipefail: 管道中任何命令失败则失败
- 写法: set -euo pipefail
constants:
- 全大写: RED, GREEN, CYAN
- readonly 修饰: readonly RED='\033[0;31m'
variables:
- 局部变量: local var_name
- 全局变量: GLOBAL_VAR_NAME
- 引用: "${var_name}" (总是加引号)
functions:
- 命名: snake_case
- 声明: function_name() { ... }
- 返回值: return 0/1 或 echo result
comments:
- 每个函数前注释功能
- 复杂逻辑添加行内注释
- 分隔符: # ===== Section =====
requirements:
command_check:
- if ! command_exists python3; then
- command -v cmd &> /dev/null
file_check:
- if [ -f "$file" ]; then
- if [ -d "$dir" ]; then
error_exit:
- log_error "Error message"
- exit 1 或 return 1
trap_signals:
- trap cleanup_function EXIT
- trap handle_sigint SIGINT
- 确保资源清理
requirements:
avoid_subshells:
- 优先使用 bash 内建命令
- 避免不必要的 | 管道
cache_results:
- 重复使用的值存储到变量
- 避免重复调用外部命令
parallel_execution:
- 独立任务使用 & 并行
- 使用 wait 等待完成
test_cases:
initialization:
- [ ] 首次运行自动创建目录
- [ ] 首次运行自动安装依赖
- [ ] 首次运行创建虚拟环境
- [ ] 重复运行不重复初始化(幂等性)
- [ ] 环境已存在时跳过创建,直接检查完整性
- [ ] 依赖已安装时跳过安装,仅验证版本
- [ ] 启动速度:二次启动明显快于首次(无重复安装)
interactive_mode:
- [ ] Banner 正常显示
- [ ] 菜单选项正确
- [ ] 无效输入有提示
- [ ] 每个菜单项都能执行
non_interactive_mode:
- [ ] ./control.sh start --silent 成功启动
- [ ] ./control.sh stop --silent 成功停止
- [ ] ./control.sh status 正确显示状态
- [ ] 错误返回非零退出码
service_management:
- [ ] 启动服务创建 PID 文件
- [ ] 停止服务删除 PID 文件
- [ ] 重启服务正常工作
- [ ] 状态显示准确
self_repair:
- [ ] 删除目录后自动重建
- [ ] 手动创建僵尸 PID 后自动清理
- [ ] 权限不足时有明确提示
module_system:
- [ ] 创建 modules/ 目录
- [ ] 放入测试模块能自动加载
- [ ] 模块函数可以调用
logging:
- [ ] 日志文件正常创建
- [ ] 日志包含时间戳和级别
- [ ] 彩色输出正常显示
- [ ] 日志轮转功能正常
edge_cases:
- [ ] 无 sudo 权限时依赖检查跳过
- [ ] Python 已安装时跳过安装
- [ ] 虚拟环境已存在时不重建
- [ ] 服务已运行时不重复启动
- [ ] requirements.txt 依赖已满足时不执行 pip install
- [ ] pip 版本已是最新时不执行升级
- [ ] 部分依赖缺失时仅安装缺失部分,不重装全部
生成的脚本应该:
👇 在这里添加你的逻辑 供用户定制#!/bin/bash
# ==============================================================================
# 项目名称控制面板
# ==============================================================================
set -euo pipefail
# ==============================================================================
# LAYER 1: 环境检测与智能安装(按需安装,避免重复)
# ==============================================================================
# 颜色定义
readonly RED='\033[0;31m'
# ... 其他颜色
# 路径定义
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# ... 其他路径
# 环境检测函数
detect_environment() { ... }
check_system_dependencies() { ... }
check_venv_exists() { ... } # 检查虚拟环境是否存在
verify_dependencies() { ... } # 验证依赖完整性
smart_install_if_needed() { ... } # 智能安装:仅在检查失败时安装
# ... 其他函数
# ==============================================================================
# LAYER 2: 初始化与自修复
# ==============================================================================
init_directories() { ... }
clean_stale_pids() { ... }
# ... 其他函数
# ==============================================================================
# LAYER 3: 参数化启动
# ==============================================================================
parse_arguments() { ... }
print_usage() { ... }
# ... 其他函数
# ==============================================================================
# LAYER 4: 模块化插件系统
# ==============================================================================
load_modules() { ... }
# ... 其他函数
# ==============================================================================
# LAYER 5: 监控与日志
# ==============================================================================
log_info() { ... }
get_process_info() { ... }
# ... 其他函数
# ==============================================================================
# 服务管理功能(用户定制区)
# ==============================================================================
start_service() {
log_info "Starting service..."
# 👇 在这里添加你的启动逻辑
}
stop_service() {
log_info "Stopping service..."
# 👇 在这里添加你的停止逻辑
}
# ==============================================================================
# 交互式菜单
# ==============================================================================
print_banner() { ... }
show_menu() { ... }
interactive_mode() { ... }
# ==============================================================================
# 主入口
# ==============================================================================
main() {
parse_arguments "$@"
init_system
load_modules
if [ -n "$COMMAND" ]; then
execute_command "$COMMAND"
else
interactive_mode
fi
}
main "$@"
生成脚本后,同时生成:
提供以下场景的实现示例:
# 首次运行(自动配置环境:安装依赖、创建虚拟环境)
./control.sh --force
# 后续运行(智能检查:仅验证环境,不重复安装,启动快速)
./control.sh
# 交互式菜单
./control.sh
# 命令行模式
./control.sh start --silent
./control.sh status
./control.sh stop --silent
# GitHub Actions
- name: Deploy
run: |
chmod +x control.sh
./control.sh start --silent --force
./control.sh status || exit 1
[Service]
ExecStart=/path/to/control.sh start --silent
ExecStop=/path/to/control.sh stop --silent
Restart=on-failure
用户只需修改以下 3 处即可使用:
项目路径(可选)
PROJECT_ROOT="${SCRIPT_DIR}"
启动逻辑
start_service() {
# 👇 添加你的启动命令
nohup python3 app.py >> logs/app.log 2>&1 &
echo $! > data/app.pid
}
停止逻辑
stop_service() {
# 👇 添加你的停止命令
kill $(cat data/app.pid)
rm -f data/app.pid
}
control.sh 或 项目名-control.shservice_name.pidcontrol.log, service.logmodules/功能名.sh1. 命令行参数 (最高优先级)
2. 环境变量
3. .env 文件
4. 脚本内默认值 (最低优先级)
生成完成后,应交付:
版本: v2.0 最后更新: 2025-11-07 兼容性: Bash 4.0+, Ubuntu/CentOS/macOS
将本文档作为提示词提供给 AI 时,使用以下格式:
请根据《生产级 Shell 控制面板生成规格说明》生成一个控制面板脚本。
项目信息:
- 项目名称: [你的项目名称]
- 用途: [描述项目用途]
- 主要功能: [列出需要的主要功能]
特殊要求:
- [列出任何额外的特殊要求]
请严格按照规格说明中的 5 层架构实现,确保所有功能完整且可用。
注意: 本规格说明经过实战验证,覆盖了生产环境 99% 的常见需求。严格遵循本规格可生成高质量、可维护的控制面板脚本。