Linux Shell 脚本入门:变量、循环与定时任务

举报
神的孩子都在跳舞 发表于 2026/11/09 09:00:33 2026/11/09
【摘要】 在 Linux 服务器上工作久了,你会发现很多重复操作其实可以交给脚本:每天清理日志、定时备份、批量改名……与其一遍遍敲同样的命令,不如把它们写进一个 Shell 脚本里,让机器替你跑完。本篇带你从零写出第一个可用的 Shell 脚本。 为什么写脚本图形界面点一点很方便,但它做不了批量、做不了定时,也很难复现。一个 Shell 脚本就是把一串命令按顺序写进文本文件,再交给 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 开始,把重复劳动交给脚本,你会发现服务器运维也可以很省心。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。