Shell 脚本入门实战:从第一行命令到自动化备份

举报
yd_293554343 发表于 2026/10/27 10:03:11 2026/10/27
【摘要】 第一次打开终端,看到闪烁的光标,很多人不知道从哪里下手。其实 Shell 脚本就是把平时一条一条敲的命令写进文件,让电脑按顺序自动执行,备份、清理和检查都能交给它。 一、写出第一个脚本新建一个名为 hello.sh 的文件,第一行写解释器声明,告诉系统用哪个 Shell 执行它;第二行写一句输出命令。保存后给文件加上可执行权限,再用相对路径运行它,看到输出就说明跑通了。#!/bin/bash...

第一次打开终端,看到闪烁的光标,很多人不知道从哪里下手。其实 Shell 脚本就是把平时一条一条敲的命令写进文件,让电脑按顺序自动执行,备份、清理和检查都能交给它。

一、写出第一个脚本

新建一个名为 hello.sh 的文件,第一行写解释器声明,告诉系统用哪个 Shell 执行它;第二行写一句输出命令。保存后给文件加上可执行权限,再用相对路径运行它,看到输出就说明跑通了。

#!/bin/bash
echo "你好,Shell!"

运行前执行 chmod +x hello.sh,再执行 ./hello.sh。记住:第一行声明不能省,文件名用小写字母加下划线,运行前先检查权限。

二、变量与条件判断

变量用来保存会变化的值,比如备份目录和日期。赋值时等号两边不能加空格,取值时在变量名前加美元符号。条件判断可以让脚本自己做选择:目录不存在就创建,文件为空就提示并退出。

BACKUP_DIR="/home/user/backup"
TODAY=$(date +%Y%m%d)
if [ ! -d "$BACKUP_DIR" ]; then
  mkdir -p "$BACKUP_DIR"
fi
echo "今天是 $TODAY"

方括号两边要留空格,变量最好用双引号包起来,路径里有空格也不会被拆开。

三、循环:把重复交给机器

要处理多个文件时,一个一个写命令既慢又容易漏。for 循环可以按顺序处理一批文件,while 循环适合在条件成立时一直重复。

for file in *.log; do
  echo "正在处理 $file"
done

循环里先用 echo 打印要做的事情,确认无误后再换成真正的处理命令,这是一个很实用的调试习惯。

四、写一个备份脚本

把前面学到的内容拼起来,就能得到一个真正有用的备份脚本:生成带日期的文件名,用打包命令把重要目录压缩,成功就提示完成,失败就提示检查磁盘空间。

#!/bin/bash
set -e
SRC="/home/user/docs"
DST="/home/user/backup/docs-$(date +%Y%m%d).tar.gz"
tar -czf "$DST" "$SRC"
echo "备份完成:$DST"

set -e 表示遇到错误立即退出,避免出错后还继续往下跑。备份完成后,最好抽查解压一个文件,确认备份真的能恢复。

五、定时任务:让备份自己跑

脚本写好后,还需要一个闹钟。定时任务 crontab 可以按分钟、小时、日期安排脚本自动运行。下面这行表示每天凌晨两点执行备份。第一次先把时间设成几分钟后,观察一次是否真的执行,再改成正式时间。

0 2 * * * /bin/bash /home/user/backup.sh

定时任务里没有平时终端里的环境变量,命令最好写绝对路径,输出重定向到日志文件,方便事后排查。

六、新手常见坑

  • 赋值时等号两边加了空格,系统会把变量名当成命令。
  • 条件判断的方括号没有留空格,导致语法报错。
  • 脚本在本地能跑,放到服务器上却提示找不到文件,多半是路径写成了相对路径。
  • 危险命令一定要先用 echo 演练,不要直接在生产目录里测试新脚本。

从第一行命令到自动备份,学习路径其实很短:先跑通一个小脚本,再学会变量、判断和循环,最后把它交给定时任务。每天把一个重复操作写成脚本,你的工具箱就会越来越顺手。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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