温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何测试Shell运维脚本

发布时间:2026-11-08 20:14:36 来源:亿速云 阅读:102 作者:小樊 栏目:系统运维

测试 Shell 运维脚本(尤其是用于生产环境的)不能只靠“跑一下看看”,需要从语法、逻辑、边界、安全、可重复几个层面系统性验证。下面给你一套实用方法。


一、基础静态检查(不改运行环境)

1. 语法检查

bash -n script.sh

只检查语法,不执行。

2. ShellCheck(强烈推荐)

shellcheck script.sh

能发现:

  • 未加引号变量
  • 命令替换问题
  • 逻辑隐患
  • 可移植性问题

3. 开启调试模式

bash -x script.sh

或脚本内:

set -x

二、运行时安全策略(防止“误操作”)

1. 失败即退出

set -euo pipefail
  • -e:命令失败就退出
  • -u:未定义变量报错
  • -o pipefail:管道中任意失败都算失败

2. Dry Run(模拟执行)

如果脚本有危险操作(rm、重启、推送):

  • 用 echo 替代真实命令
  • 或加 --dry-run 参数
if [ "$DRY_RUN" = "1" ]; then
  echo "will restart nginx"
else
  systemctl restart nginx
fi

三、单元测试 Shell 脚本

1. 函数化拆分(关键)

不要写“一坨脚本”,要拆函数:

check_disk() {
  df -h / | awk 'NR==2 {print $5}'
}

2. 使用测试框架

shunit2(常用)

apt install shunit2

示例:

test_check_disk_not_empty() {
  result=$(check_disk)
  assertNotNull "$result"
}

运行:

shunit2 test_script.sh

四、环境与边界测试(运维重点)

1. 异常输入测试

  • 空参数
  • 错误参数
  • 超大文件
  • 网络中断
  • 磁盘满

2. 权限测试

sudo -u nobody bash script.sh

3. 容器 / 沙箱测试

  • Docker
  • Vagrant
  • 测试机(不要直接上生产)

五、日志与可观测性验证

1. 日志级别

log_info "starting"
log_error "failed"

2. 退出码规范

0  成功
1  通用错误
2  参数错误

测试:

bash script.sh; echo $?

六、CI 中自动化测试(推荐)

GitHub Actions / GitLab CI:

  • shellcheck
  • bash -n
  • shunit2
  • 容器执行

七、运维脚本测试 checklist ✅

  • [ ] bash -n 通过
  • [ ] shellcheck 无错误
  • [ ] set -euo pipefail
  • [ ] 函数可单测
  • [ ] 异常输入不崩
  • [ ] 危险操作有 dry-run
  • [ ] 日志清晰
  • [ ] 非生产环境验证过

如果你愿意,可以把你的脚本或场景(如:备份、发布、监控、清理)发出来,我可以直接帮你设计测试方案或改写可测试版本。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手