游客发表
朋友发来一个压缩包,脚本文件说里面有个“一键清理”的脚本文件脚本,让我帮忙看看。脚本文件解压后是脚本文件个不到两KB的.bat文件,双击运行,脚本文件命令行窗口一闪而过。脚本文件我打开它,脚本文件里面只有三行:删除临时文件夹、脚本文件清空回收站、脚本文件重启资源管理器。脚本文件就这么简单的脚本文件东西,他用了三年。脚本文件
脚本文件本质上是脚本文件把一串命令塞进一个文本文件里,让系统按顺序执行。脚本文件Windows下常见的脚本文件是.bat和.cmd,Linux和macOS下则是.sh。后缀名不同,内核逻辑却惊人地一致——逐行读取,逐行执行,遇到错误就停或者继续,取决于你怎么写。我见过有人用一行Python脚本批量重命名几千张照片,也见过运维工程师用三百行的Shell脚本管理整个机房的部署流程。脚本的边界不在长度,在你想让机器替你做什么。
写脚本最怕的是“想当然”。上个月我写了个自动备份的.sh,逻辑很简单:打包指定目录,用日期命名,存到移动硬盘。测试时一切正常。一周后查看备份文件夹,空的。原因是我用了tar -czf backup_$(date +%Y%m%d).tar.gz /home/user/docs,而那个时间点移动硬盘没挂载,tar把压缩包写到了根目录下——权限不够,静默失败。脚本不会告诉你“我觉得这里有问题”,它只会忠实地执行你写的每一行,包括错误。
调试脚本有个笨办法但很管用:把每一行拆开,在终端里手动跑一遍。尤其是涉及路径、权限、环境变量的部分。我习惯在脚本开头加set -e,让Shell遇到非零返回值就退出,而不是继续往下跑。这能避免“删了A目录但B目录没备份”这种灾难。Windows批处理则要在关键命令后加if %errorlevel% neq 0 exit /b,虽然啰嗦,但比事后查日志强。
有人觉得脚本是“临时方案”,正式项目该用编译型语言。我不完全同意。脚本的优势在于“就地取材”——系统自带解释器,不需要编译,改一行立刻生效。处理日志分析、文件批量操作、定时任务,脚本比任何语言都快。上周帮同事从十万行CSV里提取特定IP的访问记录,awk一行搞定:awk -F',' '$3 ~ /192\.168\.1\./' access.log > filtered.txt。换成Java写,光读文件就得十几行。
但脚本也有天花板。变量作用域模糊、错误处理全靠手动、跨平台兼容性差。我见过一个两千行的.bat文件,里面嵌套了七层if,维护的人离职后没人敢动。这种时候该重构就重构,该换Python就换Python。脚本是工具,不是信仰。
现在我的做法是:一次性任务用脚本,重复性任务写成函数库,超过两百行就考虑换语言。脚本文件躺在项目根目录的scripts/文件夹里,每个开头都写清楚用途、参数和依赖。比如deploy.sh第一行注释是“用法:./deploy.sh staging|production,需要先配置~/.ssh/config”。这比任何文档都直接。
回到朋友那个清理脚本。我给他加了行echo 正在清理...和pause,让他能看到执行结果。他问为什么之前没有。我说,因为你写的时候只想着“能跑就行”,没想过“跑的时候人在不在”。脚本是写给机器执行的,但首先是写给人看的——包括三个月后的你自己。
友情链接