Shell脚本自动化:五个能让你每天省一小时的技巧

王尘宇 实用技巧 1

我前阵子给团队做了一次内部培训,主题是"你重复做的任何事,都应该有一个脚本"。培训结束后的一个月里,团队里有人写了个自动部署脚本把上线时间从15分钟压到了40秒,有人写了个日志分析脚本替代了每周一上午的手动报表。以下是五个实际在用、每天都奏效的Shell自动化技巧。

1. 项目初始化不靠脑子靠脚本

每次git clone一个新项目之后要做的事,99%的人靠肌肉记忆:npm install、cp .env.example .env、生成APP_KEY、创建数据库、跑migration。我见过一个开发者因为忘了cp .env文件,排错了两个小时。

一个setup.sh脚本,不到30行,解决所有问题:

#!/bin/bash
set -euo pipefail
echo "正在安装依赖..."
npm ci
if [ ! -f .env ]; then
cp .env.example .env
echo "已创建.env,请填写配置"
fi
npx prisma migrate dev
echo "项目初始化完成,运行 npm run dev 启动"

set -euo pipefail 这行是关键:任何命令失败就停止(-e)、未定义变量报错(-u)、管道中任意命令失败都报错(-o pipefail)。没有这行,脚本可能静默失败——你以为是成功的,其实中间某步已经悄悄挂了。

2. 定时备份不需要第三方服务

MySQL数据库备份,一个cron一行:

0 3 * * * mysqldump -u USER -p'PASS' DB_NAME | gzip > /backup/db_$(date +\%Y\%m\%d).sql.gz && find /backup -name 'db_*.sql.gz' -mtime +30 -delete

这条命令做了三件事:每天凌晨3点导出数据库并压缩、文件名自动带日期、只保留最近30天的备份。find那一段是自动清理——很多人写了备份脚本但从来没想过"备份文件占满磁盘怎么办"。我的服务器上曾经因为没加清理逻辑,/backup目录攒了400GB的历史备份,服务器直接挂了。

3. Git操作自动化——别每次都手打那么长的命令

所有git操作里,"快速提交并推送"是频率最高的。一个function收进.bashrc:

gq() { git add -A && git commit -m "$1" && git push; }

然后 gq "修复了登录页的token过期问题" 一条命令搞定。如果你的项目用了commitizen或者需要符合某个commit格式,在function里加进去就行。关键是——别把时间浪费在重复敲git add、git commit上。

4. 日志分析——别打开VSCode翻两个小时

Nginx access log里找出访问量最高的10个IP:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

找出响应时间超过2秒的请求:

awk '$NF > 2' /var/log/nginx/access.log

$NF在awk里代表最后一个字段。Nginx日志格式里最后一个字段默认是响应时间(如果有配置的话)。这两个命令加上grep过滤特定时间段,80%的日志排查需求都覆盖了。

5. 健康检查脚本——别等到用户来告诉你"网站挂了"

一个最小化的监控脚本:

#!/bin/bash
URL="https://yoursite.com"
STATUS=$(curl -o /dev/null -s -w "%{http_code}" $URL)
if [ "$STATUS" != "200" ]; then
echo "警告:$URL 返回 $STATUS" | mail -s "网站异常" you@email.com
fi

配合cron每5分钟跑一次。如果200以外的状态码就发邮件。2026年发送邮件可以用mailgun的API替换mail命令——更可靠,不会被当垃圾邮件拦截。

如果你的网站在Cloudflare后面,健康检查可以直接在CF面板上配置,不需要自己写脚本。但自己写的好处是你可以检查更细粒度的东西——比如页面里是否包含某些关键字、API是否返回期望的数据结构,这些CF的默认检查做不到。

以上五个技巧的共同点:不需要学新语言、不需要装新框架、不需要付费工具。一行命令能省下来的时间,就别用复杂的自动化平台去解决。Shell脚本的价值不在于"能做什么",而在于"你明天就能用"。

标签: Shell脚本 自动化 linux 开发者效率 命令行

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~