Shell 脚本入门实战:3 步写出第一个自动化脚本

举报
yd_252976195 发表于 2026/11/12 11:36:05 2026/11/12
【摘要】 每天敲同样的几条命令:进目录、备份文件、重启服务——敲三遍就烦了。Shell 脚本就是把这些命令写进一个文件,让电脑按顺序替你跑一遍。下面用 3 步写出第一个能用的自动化脚本。 1. 先写一个能跑起来的最小脚本新建一个文件 backup.sh,写三行:#!/bin/bashecho "开始备份"cp notes.txt notes.txt.bak第一行 #!/bin/bash 叫 sheba...

每天敲同样的几条命令:进目录、备份文件、重启服务——敲三遍就烦了。Shell 脚本就是把这些命令写进一个文件,让电脑按顺序替你跑一遍。下面用 3 步写出第一个能用的自动化脚本。

1. 先写一个能跑起来的最小脚本

新建一个文件 backup.sh,写三行:

#!/bin/bash
echo "开始备份"
cp notes.txt notes.txt.bak

第一行 #!/bin/bash 叫 shebang,告诉系统用 bash 来解释这个文件,没有它系统不知道该怎么执行。echo 是打印一句话,cp 是复制文件——这里就是把 notes.txt 备份成 notes.txt.bak。脚本的本质就是命令的集合:你在终端里能敲的命令,写进文件里一样能跑。

给它执行权限,再运行:

chmod +x backup.sh
./backup.sh

chmod +x 是加上“可执行”这个属性,没有它系统会拒绝运行。./ 表示“当前目录下的这个文件”,直接写 backup.sh 系统会去 PATH 里找,找不到就报错。看到“开始备份”打印出来、目录里多了一个 .bak 文件,第一步就成了。

2. 让脚本聪明一点:变量和判断

每次备份都覆盖同一个 .bak 文件,旧备份就丢了。用变量把日期拼进文件名:

#!/bin/bash
today=$(date +%Y%m%d)
cp notes.txt "notes-$today.txt.bak"
echo "已备份到 notes-$today.txt.bak"

$(date +%Y%m%d) 是把命令的输出抓回来当变量值,$today 就是引用这个变量。双引号里的 $today 会被替换成真实日期,单引号里则不会——这是新手最常踩的坑之一。

再加一个判断:文件不存在就别硬拷,直接报错退出:

if [ ! -f notes.txt ]; then
  echo "找不到 notes.txt,退出"
  exit 1
fi

[ ! -f notes.txt ] 的意思是“notes.txt 不是一个存在的文件”,exit 1 表示异常退出(0 才表示成功)。判断让脚本从“傻跑一遍”变成“知道自己在干什么”,出错时第一时间停下来,而不是一路错下去。

3. 循环:一次处理一堆文件

只备份一个文件还不够,实际要备份一整个目录。用循环遍历所有 .txt 文件:

for file in *.txt; do
  cp "$file" "backup/$file.bak"
  echo "已备份 $file"
done

*.txt 会展开成当前目录下所有 txt 文件,循环一个一个处理。注意 "$file" 要加双引号——文件名里万一有空格,不加引号会被拆成两个参数,复制就报错了。

把三步拼起来,就是一个能每天用的备份脚本:判断文件在不在、按日期命名、循环备份一堆文件。以后每天的手动操作,都可以照这个套路拆成“判断 + 循环 + 命令”写进脚本。

新手最容易踩的三个坑

第一,Windows 上写的脚本拿到 Linux 上跑,行尾的回车符会让 bash 报错。写脚本尽量直接在 Linux 环境里写,或者用编辑器把换行符改成 LF。

第二,rm 写进脚本要格外小心。rm -rf $dir/ 里变量一旦为空,就会变成 rm -rf /,后果不堪设想。删文件之前先 echo 出来确认一遍,或者先判断变量非空再执行。

第三,脚本里用相对路径,换个目录跑就找不到文件。定时任务跑脚本时当前目录往往不是你以为的那个,稳妥的做法是在脚本开头 cd 到固定目录,或者全程用绝对路径。

小结

Shell 脚本的入门套路就三步:把命令写进文件并加上执行权限,用变量和判断让它懂得变通,再用循环一次处理一堆文件。先从每天重复的那几条命令开始,把它们写成脚本跑通——能替你省下每天三分钟的脚本,就是好脚本。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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