写脚本不是制作程序员的专利。上周我邻居家小孩用Python写了个自动整理桌面文件的脚本教程小工具,二十行代码,制作解决了他每天手动分类下载文件的脚本教程麻烦。这就是制作脚本的本质——让机器替你干重复的活。
脚本语言和编译型语言最大的脚本教程区别在于执行方式。你写一行Python,制作敲回车,脚本教程它立刻跑起来。制作C++得先编译成二进制,脚本教程再运行。制作脚本省掉了编译环节,脚本教程代价是制作运行速度慢一些。但对日常任务来说,脚本教程这点速度差异根本感觉不到。制作我处理一个包含三千行文本的日志文件,Python脚本跑完不到两秒,换成C++可能快十倍,但我只关心那两秒里能不能喝口水。
选哪门语言
Bash适合文件和系统操作。你每天在终端敲的
ls、cd、grep,组合起来就是脚本。比如批量重命名照片:for f in *.jpg; do mv "$f" "vacation_$f"; done。一行搞定。Python覆盖面更广。字符串处理、网络请求、Excel读写,标准库和第三方库都齐全。我见过运维用Python写服务器健康检查,每五分钟跑一次,异常就发钉钉消息。代码不到五十行。
JavaScript在浏览器里能直接操作网页元素。写个油猴脚本,自动跳过视频广告、展开全文、抓取表格数据,都是常见操作。
别纠结“最好”的语言。先看你要解决什么问题。文件操作选Bash,数据处理选Python,网页交互选JavaScript。
从一行命令开始
打开终端,输入
echo "hello"。这就是脚本的雏形。把它存成hello.sh,加上执行权限chmod +x hello.sh,然后./hello.sh。你写了第一个脚本。Python版本更简单。新建
hello.py,写入print("hello"),终端运行python3 hello.py。结束。脚本不需要IDE。VS Code、Sublime,甚至记事本都行。我习惯用vim,因为服务器上只有这个。语法高亮和自动补全对写脚本帮助有限,逻辑清晰比工具花哨重要得多。
处理输入和输出
脚本的价值在于处理变化的数据。硬编码的文件名、固定的路径,只能跑一次。加上参数就灵活了。
Bash里用
$1、$2获取参数。Python用sys.argv。比如一个批量压缩图片的脚本,接收目录路径作为参数,遍历所有PNG转成JPEG。参数让同一个脚本能处理不同文件夹。输出不一定要打印到屏幕。写入文件、发送HTTP请求、调用系统通知,都是输出。我写过一个脚本,每天凌晨抓取天气数据,写入CSV文件。半年后翻看,发现去年同期的温度比今年低三度。
错误处理不能省
脚本跑一半崩了,比不跑更麻烦。文件不存在、网络超时、权限不足,这些情况必须考虑。
Bash里用
set -e让脚本遇到错误立即退出。Python用try...except捕获异常。别写裸的except:,那会吞掉所有错误信息,调试时你连哪里出错都不知道。日志比打印语句有用。Python的
logging模块,Bash的重定向>>,都能留下执行痕迹。脚本半夜跑失败,第二天看日志就知道是磁盘满了还是API变了。什么时候不该写脚本
一次性任务,手动做五分钟,写脚本半小时,不值。需要复杂界面交互的,脚本不合适。对性能要求极高的,换编译型语言。
脚本的边界很清楚:自动化重复的、逻辑简单的、对速度不敏感的任务。超出这个范围,用别的工具。
写完脚本记得加注释。三个月后你回来看
顶: 4926踩: 68grep -v "^#" | awk '{ print $2}',没有注释根本想不起来当时在干什么。注释不用多,一行说明意图就够。






评论专区