测试 Shell 运维脚本(尤其是用于生产环境的)不能只靠“跑一下看看”,需要从语法、逻辑、边界、安全、可重复几个层面系统性验证。下面给你一套实用方法。
bash -n script.sh
只检查语法,不执行。
shellcheck script.sh
能发现:
bash -x script.sh
或脚本内:
set -x
set -euo pipefail
-e:命令失败就退出-u:未定义变量报错-o pipefail:管道中任意失败都算失败如果脚本有危险操作(rm、重启、推送):
echo 替代真实命令--dry-run 参数if [ "$DRY_RUN" = "1" ]; then
echo "will restart nginx"
else
systemctl restart nginx
fi
不要写“一坨脚本”,要拆函数:
check_disk() {
df -h / | awk 'NR==2 {print $5}'
}
apt install shunit2
示例:
test_check_disk_not_empty() {
result=$(check_disk)
assertNotNull "$result"
}
运行:
shunit2 test_script.sh
sudo -u nobody bash script.sh
log_info "starting"
log_error "failed"
0 成功
1 通用错误
2 参数错误
测试:
bash script.sh; echo $?
GitHub Actions / GitLab CI:
bash -n 通过set -euo pipefail如果你愿意,可以把你的脚本或场景(如:备份、发布、监控、清理)发出来,我可以直接帮你设计测试方案或改写可测试版本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。