Shell 脚本入门:从第一个脚本到定时备份的日常实践
很多运维和开发工作,每天都在重复同一串命令:查磁盘、看日志、备份文件、重启服务。第一次做觉得新鲜,第十次就只想让它自己跑起来。Shell 脚本就是把这些重复操作写成一份操作清单,让系统按顺序自动执行。它不需要安装重型框架,一台 Linux 机器、一个文本编辑器就能开始,是性价比很高的自动化入门方式。
一、为什么先学 Shell 脚本
Shell 脚本的优势不在强大,而在贴近系统。它直接调用系统自带的命令,写起来短、改起来快、出了问题也容易定位。对于个人服务器、开发机和小型项目来说,大多数日常任务用几十行脚本就能解决,不必先搭一套复杂的调度平台。更重要的是,写脚本会逼着你把操作步骤想清楚:先做什么、失败了怎么办、结果存到哪里,这些思考本身就是运维能力的一部分。
二、写第一个脚本
新建一个名为 hello 的脚本文件,写入下面三行:
#!/bin/bash
echo "你好,Shell!"
date
第一行声明用 Bash 解释执行,第二行打印一句话,第三行输出当前时间。然后给它执行权限并运行:
chmod +x hello
./hello
能看到输出,就说明第一个脚本跑通了。初学时常犯的两个小错误值得记住:一是忘记加执行权限,二是在 Windows 下编辑导致换行符不兼容,尽量直接在 Linux 环境里写。
三、让脚本像个小工具
一个能长期用的脚本,至少要做到三点:有变量、有判断、有日志。比如备份脚本里,把目录写成变量,换一台机器只改一行;用判断检查源目录是否存在,不存在就退出并提示;把每一步的结果写进日志文件,事后能查。
#!/bin/bash
SRC="$HOME/documents"
DST="$HOME/backup"
LOG="$HOME/backuplog"
mkdir -p "$DST"
if [ ! -d "$SRC" ]; then
echo "源目录不存在" >> "$LOG"
exit 1
fi
cp -r "$SRC" "$DST/documents-backup"
echo "备份完成" >> "$LOG"
给变量加双引号,是为了防止路径里有空格时被拆成两段;用日期给备份目录加后缀,同一个目录下每天的备份不会互相覆盖。
四、交给定时任务定时执行
脚本写好后,定时执行交给系统自带的定时任务工具。打开定时任务编辑界面,加上一行配置,意思是每天凌晨两点运行一次备份脚本。写定时任务时建议用绝对路径,并把输出重定向到日志文件,这样任务没跑或者跑错了,都有地方可查。第一次设置后,第二天早上先看日志确认一次,比默默假设它肯定跑了可靠得多。
五、日常实践里的几点经验
第一,先在测试目录里跑通,再去碰真实数据,备份脚本尤其如此。第二,删除、覆盖类的命令先打印出来确认,确认无误再真正执行。第三,脚本越短越好,一个脚本只做一件事,多个小脚本组合起来,比一个几百行的大脚本好维护。第四,定期回看日志和备份结果,自动化不是写完就忘,而是写完有人看。
从第一个输出问候语的命令,到每天凌晨自动备份,Shell 脚本的学习路径其实很短:先跑通,再加变量和判断,最后交给定时任务。把每天重复的操作收进脚本,省下来的时间,才是留给真正需要动脑子的工作的。
- 点赞
- 收藏
- 关注作者
评论(0)