Shell脚本从零到自动化部署
从一行命令到脚本
运维最开始的起点很简单:SSH 登录服务器,敲命令。
但敲久了就发现,有些命令组合你每天都要跑——查磁盘、看内存、确认容器活着没。每次都手打一遍?太蠢了。
Shell 脚本就是把重复的手动操作,写成一个文件,以后一行跑完。
第一版:能跑就行
最开始写的健康检查脚本长这样:
1 | |
能用。但输出乱,看不懂哪里有问题。
学了三个东西,脚本突然不一样了
1. 变量
不用把 IP 地址、阈值写死在代码各处,改一处就行:
1 | |
2. 条件判断
1 | |
Shell 的 if 语法和大多数语言不一样,记几个最常用的:
| 写法 | 含义 |
|---|---|
-gt |
大于 (greater than) |
-lt |
小于 (less than) |
-eq |
等于 (equal) |
-ne |
不等于 (not equal) |
-n "$VAR" |
变量非空 |
3. 函数
把每个检查「打包」成独立函数,想加检查就加一个函数,结构清晰:
1 | |
第二版:彩色输出 + 告警阈值
1 | |
一眼看出哪个指标出问题了。绿色的 ✅ 正常,红色的 ⚠ 告警。
颜色实现很简单:
1 | |
\033[32m 开启绿色,\033[0m 关闭颜色。32 = 绿,31 = 红,33 = 黄。
进阶:博客一键部署脚本
有了健康检查还不够。每次更新博客要:
- 本地
hexo generate scp上传到 ECS- SSH 上去
docker compose restart
也是重复劳动,写个脚本一劳永逸:
1 | |
踩过的坑
1. docker compose 用服务名,不是容器名
1 | |
docker-compose.yml 里 services: 下面定义的叫服务名,container_name 只是容器显示名。compose 命令只看服务名。
2. chmod 权限
脚本写完必须加执行权限:
1 | |
否则会报 Permission denied。这其实是在鸟哥第 5 章里讲的——Linux 文件权限基础。
3. $? 判断上一条命令是否成功
1 | |
$? 是上一条命令的退出码。0 = 成功,非 0 = 失败。
两条脚本,覆盖一个运维的日常
| 脚本 | 用途 | 频率 |
|---|---|---|
check.sh |
快速确认服务器状态 | 每天 SSH 上去就跑 |
backup.sh |
自动备份配置文件 | cron 凌晨 3 点 |
deploy-blog.sh |
更新博客并上线 | 写了新文章就跑 |
下一个目标
学了 Shell 基本语法之后,接下来想深入 Docker——自己写 Dockerfile,把博客打包成一个完整的镜像。
运维的本质不是写代码,是把重复的事交给机器做。Shell 脚本是第一把钥匙。
Shell脚本从零到自动化部署
https://bingsv.github.io/2026/07/01/Shell脚本从零到自动化部署/