Bash 脚本入门教程：从第一个脚本到自动备份

Bash 脚本入门教程 Bash 是 Linux/macOS 的默认 Shell，也是自动化最趁手的工具。很多重复性工作——批量改名、定时备份、日志清理——写几行 Bash 脚本就能解决。本教程依据 Bash 官方手册（GNU Bash Reference Manual）整理，带你从零写出第一个实用脚本。一、第一个脚本新建文件 hello.sh： #!/bin/bash # 我的第一个脚本 echo "Hello, $(whoami)! 现在时间：$(date)" 第一行 #!/bin/bash 叫 shebang，告诉系统用 bash 来执行。运行前要赋予执行权限： chmod +x hello.sh ./hello.sh 也可以不加分号直接用 bash hello.sh 执行。二、变量 name="kunkun" # 等号两边不能有空格！ echo "你好，$name" # 使用变量 echo "当前目录：$(pwd)" # 命令替换：$(命令) 注意两点：赋值时等号两侧不能有空格；$() 是执行命令并取其输出，反引号 ` 是旧写法，推荐 $()。三、条件判断 if [ "$1" = "start" ]; then echo "启动服务" elif [ -f "app.conf" ]; then echo "存在配置文件" else echo "未知命令" fi 常用判断条件：条件含义 -f 文件存在且是普通文件 -d 目录存在且是目录 -z "$s" 字符串为空 "$a" = "$b" 字符串相等 "$n" -gt 10 数值大于 10（-lt 小于、-ge 大于等于） $1、$2 是脚本的第一个、第二个参数，$# 是参数个数，$? 是上一条命令的退出码（0 表示成功）。四、循环遍历文件： for f in *.log; do echo "处理 $f" done 数值循环： for i in 1 2 3 4 5; do echo "第 $i 次" done while 逐行读取文件： while read -r line; do echo "一行内容：$line" done < list.txt 五、实战：自动备份脚本结合之前讲过的 rsync，写一个可执行的备份脚本 backup.sh： #!/bin/bash set -e # 任何一条命令失败就退出 SRC="$HOME/Documents/" DST="/media/backup/Documents/" LOG="$HOME/backup.log" echo "[$(date '+%F %T')] 开始备份" >> "$LOG" rsync -avhP --delete "$SRC" "$DST" >> "$LOG" 2>&1 echo "[$(date '+%F %T')] 备份完成" >> "$LOG" set -e 是脚本安全的第一道防线；2>&1 把错误输出也写进日志。配合 crontab 加一行 0 2 * * * /path/to/backup.sh，就是全自动备份。六、调试技巧 bash -n script.sh # 只检查语法，不执行 bash -x script.sh # 逐行打印执行过程脚本开头写 set -euo pipefail 可以开启严格模式，变量未定义、命令失败都立即报错。七、总结需求写法接收参数 $1 $2，$# 个数判断 if [ -f 文件 ]; then ... fi 遍历文件 for f in *.log; do ... done 逐行读取 while read -r line; ... done < 文件出错即停 set -e 调试 bash -x 脚本 Bash 的精髓在于把命令拼起来，而不是复杂的语法。先从解决自己手头重复劳动的小脚本写起，越写越熟练。