Shell 脚本入门:写你的第一个自动化脚本

举报
yd_28502004 发表于 2026/10/28 18:23:37 2026/10/28
【摘要】 为什么值得学 Shell 脚本每天重复敲的命令:备份目录、清理日志、批量改名、检查服务状态……把这些命令写进一个脚本文件,一次编写、到处运行,是 Linux 运维和开发提效最直接的办法。本文从零开始,带你写出第一个真正能用的自动化脚本。 第一个脚本新建一个脚本文件,写入下面两行:#!/bin/bashecho "Hello, Shell!"第一行 #!/bin/bash 叫 Shebang...

为什么值得学 Shell 脚本

每天重复敲的命令:备份目录、清理日志、批量改名、检查服务状态……把这些命令写进一个脚本文件,一次编写、到处运行,是 Linux 运维和开发提效最直接的办法。本文从零开始,带你写出第一个真正能用的自动化脚本。

第一个脚本

新建一个脚本文件,写入下面两行:

#!/bin/bash
echo "Hello, Shell!"

第一行 #!/bin/bash 叫 Shebang,告诉系统用哪个解释器执行这个脚本。然后给它执行权限并运行:

chmod +x hello.sh
./hello.sh

注意:./ 不能省——它表示“当前目录下的这个文件”,直接写脚本名时系统只会在 PATH 里找,找不到就会报 command not found。

变量与参数:让脚本“活”起来

写死内容的脚本用处有限,变量和参数能让同一个脚本处理不同输入:

#!/bin/bash
name=$1
echo "你好,$name,今天是 $(date +%Y-%m-%d)"

$1 是第一个命令行参数,$# 是参数个数,$@ 是全部参数,$(...) 可以把命令的输出嵌进字符串。运行这个问候脚本并传入名字,就会输出问候。

条件判断:脚本的“脑子”

#!/bin/bash
if [ -f "$1" ]; then
  echo "$1 存在,大小为 $(du -h "$1" | cut -f1)"
else
  echo "$1 不存在"
fi

方括号两边必须留空格,变量加双引号是个好习惯——文件名带空格时不加引号会被拆成多个词,这是新手最常见的坑。

循环:批量处理才是自动化的精髓

#!/bin/bash
for file in *.log; do
  echo "正在处理 $file"
  gzip "$file"
done

一个 for 循环就能把当前目录所有 .log 文件压缩打包。把“对一批文件做同一件事”交给循环,是 Shell 最擅长的活。

实战:写一个日志备份脚本

把前面学的拼起来,写一个每天能用的备份脚本:

#!/bin/bash
set -e
src="/var/log/myapp"
dest="$HOME/backup"
date_str=$(date +%Y%m%d)
mkdir -p "$dest"
tar -czf "$dest/myapp-$date_str.tar.gz" "$src"
find "$dest" -name "myapp-*.tar.gz" -mtime +7 -delete
echo "备份完成:$dest/myapp-$date_str.tar.gz,7 天前的旧备份已清理"

这个脚本做了四件事:按日期打包、自动建目录、清理 7 天前的旧备份、打印结果。set -e 表示任何一步出错就立即退出,避免“半截备份”还以为成功了。

配合 crontab 就能定时跑起来,每天凌晨两点自动备份:

0 2 * * * /bin/bash $HOME/backup.sh >> $HOME/backup.log 2>&1

新手避坑清单

  • 变量赋值等号两边不能有空格,a = 1 会被当成命令;
  • $变量 尽量用双引号包起来,防止空格和通配符捣乱;
  • 调试时用 bash -x 脚本名,它会逐行打印执行过程,定位问题很快;
  • 复杂逻辑先在命令行手动跑通,再写进脚本。

小结

Shell 脚本的核心就三样:把命令存进文件、用变量和参数代替写死的值、用判断和循环处理批量任务。先从备份、清理这类身边的小任务练起,写上三五个脚本,你对 Linux 的理解会深很多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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