Linux Shell 脚本入门:变量、循环与定时任务
在 Linux 服务器上工作久了,你会发现很多重复操作其实可以交给脚本:每天清理日志、定时备份、批量改名……与其一遍遍敲同样的命令,不如把它们写进一个 Shell 脚本里,让机器替你跑完。本篇带你从零写出第一个可用的 Shell 脚本。
为什么写脚本
图形界面点一点很方便,但它做不了批量、做不了定时,也很难复现。一个 Shell 脚本就是把一串命令按顺序写进文本文件,再交给 Shell 解释执行。它轻量、无需编译、随写随用,是运维和开发者的日常利器。
第一个 .sh 与执行权限
新建一个脚本文件,写入:
#!/bin/bash
echo "Hello, Shell!"
第一行叫 Shebang,告诉系统用哪个解释器执行。保存后给文件加上执行权限,再运行它:
chmod +x hello.sh
./hello.sh
注意要写点斜杠加脚本名来运行,而不是只写脚本名,因为当前目录默认不在命令搜索路径里。
变量与参数
Shell 变量赋值时等号两边不能有空格,取值时在变量名前加 $:
name="backup"
echo "开始执行 $name 任务"
脚本运行时还能接收参数,$1 是第一个参数,$0 是脚本自身的名字,$# 是参数个数。比如运行脚本时在后面跟上日志目录,把 /var/log 传进去,脚本里用 $1 就能拿到它。
if 与 for 循环
判断用 if 语句,注意方括号两边要有空格:
if [ -f "$1" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
批量处理则用 for 循环:
for file in *.log; do
echo "正在处理 $file"
done
if 判断条件、for 遍历文件,这两个结构组合起来,就能覆盖一大半日常需求。
一个实用小例子:日志清理脚本
日志文件越积越多,写个脚本定期清理 7 天前的日志:
#!/bin/bash
log_dir="/var/log/myapp"
find "$log_dir" -name "*.log" -mtime +7 -delete
echo "已清理 $log_dir 下 7 天前的日志"
find 按名字和修改时间筛选文件,-delete 直接删除。先在小目录试运行,确认无误再上生产。
crontab 定时任务入门
脚本写好了,让它每天凌晨 3 点自动跑。用 crontab -e 添加一行:
0 3 * * * /home/user/clean.sh >> /home/user/clean.log 2>&1
五个星号依次代表分、时、日、月、星期。末尾把输出重定向到日志文件,出问题时有据可查。
常见坑:空格、换行符、权限
新手最容易踩三个坑:一是赋值时等号两边加了空格,Shell 会把它当成命令;二是从 Windows 复制过来的脚本带有回车符,运行时报奇怪的错误,用 dos2unix 转一下即可;三是忘记 chmod +x 导致提示权限不足。写脚本时多想一步,再配合 set -e 让脚本出错即停,能省下不少排查时间。
从一个 echo 开始,把重复劳动交给脚本,你会发现服务器运维也可以很省心。
- 点赞
- 收藏
- 关注作者
评论(0)