10 分钟足以跑通第一个脚本并理解基本结构,适合处理简单的文件操作或命令批量执行。不要指望这时候就能写复杂逻辑,但能解决日常重复性工作。
核心摘要:10 分钟可掌握 Shell 脚本的最小可行知识,能编写简单的自动化任务,复杂逻辑需后续积累。
- 适用场景:自动化重复命令、简单文件处理
- 关键步骤:声明解释器、变量赋值、赋予执行权限
- 安全建议:先在测试环境运行,确认无误后再用于生产
快速上手步骤
使用任意文本编辑器创建文件,推荐 vim 或 nano。
vim myscript.sh
文件第一行必须写 Shebang,告诉系统用哪个 Shell 执行。
#!/bin/bash
尝试定义变量、接收用户输入和输出。
NAME="User"
echo "Hello $NAME"
read -p "Enter your name: " INPUT
echo "You entered: $INPUT"
默认新建文件没有执行权限,需要手动添加并使用相对路径运行。
chmod +x myscript.sh
./myscript.sh
进阶:逻辑与交互
脚本不仅仅是命令堆叠,涉及逻辑判断时才需要深入语法。以下是条件判断和循环的基础用法。
条件判断:检查文件是否存在。
if [ -f "config.txt" ]; then
echo "File exists"
else
echo "File missing"
fi
简单循环:遍历当前目录下的 txt 文件。
for file in *.txt; do
echo "Processing $file"
done
实战案例:批量备份文件
结合变量、循环和命令,实现一个简单的备份脚本。
#!/bin/bash
BACKUP_DIR="./backup_$(date +%F)"
mkdir -p "$BACKUP_DIR"
for file in *.log; do
if [ -f "$file" ]; then
cp "$file" "$BACKUP_DIR/"
echo "Backed up $file"
fi
done
echo "Backup completed"
验证与排查
观察终端是否有预期输出,并检查退出状态码。
echo $?
如果输出 0 表示脚本正常结束,非 0 表示出错。也可以在脚本末尾显式添加 exit 0 来确保状态码可控。
运行前建议使用 bash -n 检查语法错误,避免直接执行导致意外。
bash -n myscript.sh
常见坑
- 空格问题:变量赋值时等号两边不能有空格,
NAME="User"是对的,NAME = "User"会报错。 - 换行符问题:如果在 Windows 下编辑脚本,可能会带入
\r字符,导致解释器找不到。建议在 Linux 环境下编辑,或使用dos2unix转换。 - 权限不足:忘记
chmod +x会导致Permission denied,或者直接用bash myscript.sh运行绕过权限检查。 - 变量引用:引用变量最好加双引号,如
"$VAR",防止变量内容为空或含空格时命令解析错误。
参考来源
- GNU Bash Manual, Introduction, https://www.gnu.org/software/bash/manual/