Shell工程化:参数化脚本指南
本文最后更新于 2026年7月9日 上午
Shell工程化:参数化脚本指南
一、为什么要使用参数化脚本
传统开发中,通常会为不同功能编写多个脚本,例如:
1 | |
这种方式容易导致大量重复代码,如日志、配置加载和错误处理等。
工程化推荐采用一个脚本负责多个功能:
1 | |
这样既降低维护成本,又方便后续扩展。
二、Shell 参数变量
执行脚本时,Shell 会自动保存命令行参数。
| 变量 | 说明 |
|---|---|
$0 |
当前脚本名称 |
$1~$9 |
第 1~9 个参数 |
$# |
参数数量 |
$@ |
所有参数(推荐) |
$* |
所有参数(作为一个整体) |
示例:
1 | |
1 | |
输出:
1 | |
三、$@ 与 $* 的区别
遍历参数时推荐使用 "$@":
1 | |
执行:
1 | |
输出:
1 | |
而 "$*" 会将所有参数视为一个整体,一般不适用于参数遍历。
四、使用 case 实现命令分发
对于多个功能入口,不建议使用大量 if...elif...,推荐使用 case:
1 | |
case 结构清晰,可扩展性更强,是工程化脚本的常用方案。
五、标准工程结构
建议将每个功能封装为独立函数,由 main() 统一调度:
1 | |
其中 main "$@" 可完整保留所有命令行参数,属于推荐写法。
六、帮助信息与参数校验
建议为脚本提供统一帮助信息:
1 | |
并检查参数是否合法:
1 | |
这样可以提升脚本的易用性和健壮性。
七、多参数处理
除了命令本身,还可以接收业务参数:
1 | |
1 | |
这种方式适用于安装软件、部署服务等场景。
八、getopts 参数解析
对于 -u、-h 等命令行选项,可使用 getopts:
1 | |
适用于需要解析多个命令选项的工程脚本。
九、推荐的工程化设计
建议将命令分发独立封装,而不是全部写在 main() 中:
1 | |
这种设计遵循”流程控制与业务逻辑分离”原则,便于维护和功能扩展,也是生产环境 Shell 工程化脚本的常见实现方式。
Shell工程化:参数化脚本指南
http://example.com/f2e2e63b.html