Bash 脚本入门实操:把重复命令变成一键执行

举报
Lizi AI 发表于 2026/11/06 08:47:14 2026/11/06
【摘要】 Bash 脚本入门实操:把重复命令变成一键执行在 Linux 日常使用中,我们经常反复敲同一组命令:更新代码、备份文件、查看日志、批量重命名……每次手动输入不仅慢,还容易敲错。Bash 脚本就是解决这个问题的最简单办法:把命令按顺序写进一个文本文件,赋予执行权限,以后运行这个文件就等于一次执行全部命令。本文带你从零写出第一个能真正用上的 Bash 脚本。 一、第一个脚本:Hello 与变量...

Bash 脚本入门实操:把重复命令变成一键执行

在 Linux 日常使用中,我们经常反复敲同一组命令:更新代码、备份文件、查看日志、批量重命名……每次手动输入不仅慢,还容易敲错。Bash 脚本就是解决这个问题的最简单办法:把命令按顺序写进一个文本文件,赋予执行权限,以后运行这个文件就等于一次执行全部命令。本文带你从零写出第一个能真正用上的 Bash 脚本。

一、第一个脚本:Hello 与变量

新建文件 hello.sh,第一行必须写明解释器:

#!/bin/bash
name="开发者"
echo "你好,$name,今天是 $(date +%F)"

保存后赋予执行权限并运行:

chmod +x hello.sh
./hello.sh

这里有三个要点:#!/bin/bash 叫 Shebang,告诉系统用哪个解释器执行;变量赋值时等号两边不能有空格;引用变量用 $变量名,$(...) 则会先执行里面的命令再把结果嵌进来。把日期、主机名、当前目录用这种方式拼进输出,是写运维小脚本最常用的套路。

二、判断与循环:让脚本会做选择

脚本的价值在于自动化处理重复和分支。比如批量检查一组文件是否存在:

#!/bin/bash
for f in a.log b.log c.log; do
  if [ -f "$f" ]; then
    echo "$f 存在,大小:$(du -h "$f" | cut -f1)"
  else
    echo "$f 不存在,跳过"
  fi
done

for ... do ... done 负责遍历,if [ 条件 ]; then ... fi 负责判断,-f 表示判断普通文件是否存在,类似的还有 -d 判断目录、-z 判断字符串为空。给变量加双引号是个好习惯:文件名里有空格时,不加引号会被拆成多个参数,加了就安全。

再比如按返回值判断命令成败:每个命令执行后都有退出码,0 表示成功,非 0 表示失败,$? 就能取到它。

ping -c 1 127.0.0.1 > /dev/null
if [ $? -eq 0 ]; then echo "网络通"; else echo "网络不通"; fi

三、实战:一个每日备份脚本

把前面几样组合起来,就能写一个实用的备份脚本:把指定目录打包成带日期的压缩包,并只保留最近 7 份。

#!/bin/bash
SRC="$HOME/projects"
DST="$HOME/backups"
mkdir -p "$DST"
file="backup-$(date +%F).tar.gz"
tar -czf "$DST/$file" "$SRC" && echo "备份完成:$file"
ls -t "$DST"/backup-*.tar.gz | tail -n +8 | xargs -r rm -f
echo "清理完成,目前共 $(ls "$DST"/backup-*.tar.gz | wc -l) 份备份"

这个脚本用到了变量、命令替换、条件执行(&& 表示前一条成功才执行后一条)、管道和通配符,已经覆盖了日常脚本八成的写法。配合系统的定时任务每天自动运行一次,备份这件事就彻底不用惦记了。

四、新手避坑清单

第一,不要在生产环境随手用 rm -rf $变量/,变量为空时会变成删根目录,重要操作先 echo 出来确认。第二,脚本出错难定位时,在开头加 set -x 可以打印每条实际执行的命令,调试完再去掉;要求稳妥可以加 set -e,任一命令失败就立即退出,避免错误滚雪球。第三,路径尽量写绝对路径,定时任务的运行环境和你手动登录时的工作目录往往不同,相对路径最容易在这种时候翻车。

总结

Bash 脚本入门只需要迈过三道坎:会用变量和命令替换把信息拼起来,会用 if 和 for 让脚本做判断和重复,会用退出码和管道把多条命令串成流水线。先从备份、日志清理、批量检查这类每天都重复的小事开始写,脚本越写越顺手,这正是自动化思维的起点。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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