1. 脚本初印象:什么是脚本?

说实话,很多人一听到「脚本」这个词,就觉得是黑客电影里那些满屏滚动的绿色代码。其实没那么玄乎。

我个人的理解很简单:脚本就是写给计算机看的一份「操作说明书」。你告诉它先做什么、再做什么,它就老老实实照做。不像人类会偷懒,计算机执行脚本时,一个字都不会漏。

举个例子。你每天上班要手动备份数据库、压缩日志、发邮件汇报。这一套操作下来,少说十分钟。写个脚本,一键搞定。嗯,这就是脚本最朴素的用法——把重复劳动自动化

脚本语言 vs 编译型语言

这个问题,我当年刚入行时也困惑过。说白了,区别就在「翻译」的时机上。

对比项 脚本语言(如 Python、Bash) 编译型语言(如 C、Go)
执行方式 边解释边执行,不需要提前编译 写完代码要先编译成机器码,再运行
开发速度 快,改完就能跑 慢,改完要编译、链接
运行效率 相对慢一些 快,直接跑机器码
典型场景 自动化、胶水代码、快速原型 系统底层、高性能计算

你想想看,为什么运维和测试领域脚本语言这么流行?因为我们追求的是「快」——快速验证想法、快速修复问题。没人愿意为了改个日志路径,先等三分钟编译。

核心区别一句话:脚本语言牺牲了一点运行速度,换来了开发者的时间。在自动化运维里,人的时间比机器的时间贵多了。

脚本能做什么?

这个问题我经常被问到。我的回答是:凡是重复的、有规律的、需要人工盯着的活儿,脚本都能干

我在项目中遇到过太多这样的场景了。比如凌晨三点,线上报警说磁盘快满了。你从被窝里爬起来,SSH 上去,敲命令查日志、删文件。一次两次还行,每周来三次,谁也受不了。写个脚本,让它自己检查、自己清理、自己发通知。你安心睡觉,它替你值班。

自动化运维

这是脚本最经典的战场。服务器批量部署、日志轮转、监控告警、配置备份……说白了,运维的日常工作就是「发现问题 -> 执行命令 -> 记录结果」。脚本就是把这些步骤固化下来。

  • 批量检查 100 台服务器的磁盘使用率
  • 自动拉取最新代码并重启服务
  • 定时清理过期备份文件

我的习惯:写脚本时,永远先考虑「如果出错了怎么办」。加个 try-catch,写个日志,比啥都不做强一百倍。

数据处理

你手头有个 500MB 的 CSV 文件,老板让你统计每个月的销售额。用 Excel 打开?卡死。用 Python 脚本?几秒钟出结果。

脚本处理数据的优势在于:内存不够?分块读。格式太乱?正则清洗。结果要图表?直接生成。我经常用脚本做数据清洗,把乱七八糟的日志文件变成结构化的报表。

爬虫

爬虫说白了就是「模拟人类浏览网页」的脚本。你想收集某个网站的商品价格、新闻标题、招聘信息……写个脚本,自动抓取、自动解析、自动存库。

不过这里要提醒一句:爬虫有边界。尊重 robots.txt,别把人家服务器搞崩了。我曾经见过一个新手写的爬虫,没有加延时,直接把一个小网站爬挂了……嗯,后果很严重。

避坑指南:我曾经因为爬虫频率太高,被对方封了 IP。后来学乖了,每次请求之间随机等 1-3 秒,再加个 User-Agent 轮换。别贪快,稳才是王道。

测试

自动化测试是脚本的另一个大本营。接口测试、UI 测试、压力测试……脚本可以模拟用户操作,一遍又一遍地跑,不喊累。

我习惯在每次上线前,跑一遍自动化测试脚本。几百个用例,十几分钟跑完。要是手动测,得测到猴年马月去?

  • 接口测试:验证 API 返回状态码和数据结构
  • 回归测试:确保新代码没破坏旧功能
  • 性能测试:模拟高并发,看系统扛不扛得住

一个简单的脚本示例

说了这么多,不如看个真家伙。下面这个 Python 脚本,检查当前目录下所有日志文件,如果超过 100MB 就压缩归档。

import os
import gzip
import shutil

log_dir = "./logs"
max_size_mb = 100

for filename in os.listdir(log_dir):
    filepath = os.path.join(log_dir, filename)
    if not filename.endswith(".log"):
        continue
    size_mb = os.path.getsize(filepath) / (1024 * 1024)
    if size_mb > max_size_mb:
        # 压缩文件
        with open(filepath, 'rb') as f_in:
            with gzip.open(filepath + '.gz', 'wb') as f_out:
                shutil.copyfileobj(f_in, f_out)
        os.remove(filepath)
        print(f"已压缩: {filename} ({size_mb:.1f}MB)")

你看,不到二十行代码,就解决了一个实际运维问题。这就是脚本的魅力——小投入,大回报

小结

脚本不是什么高深莫测的东西。它就是你的「数字助理」,帮你干那些枯燥、重复、耗时的活儿。从自动化运维到数据处理,从爬虫到测试,脚本无处不在。

接下来的课程,我会带你一步步从零开始,写出真正能用的脚本。别怕,跟着我走,你很快就会发现——写脚本比你想的简单得多