81. 脚本基础:shebang / 执行 / 注释 / 变量 / 引号
本教程共 90 篇 · 第 81 篇
81. 脚本基础:shebang / 执行 / 注释 / 变量 / 引号
脚本就是一份命令清单。把你要敲的命令按行写进一个文本文件,让 Shell 一次性替你执行。重复的事交给脚本,你只管喝茶。
本教程从这一章起连续讲 bash 脚本。bash 是 Ubuntu 26.04 默认的 Shell(如 §75 所述),例子都以它为准。
第一行:shebang
脚本第一行的 #! 叫 shebang,它告诉系统”用谁来解释这份文件”。写 bash 脚本就放这一行:
#!/bin/bash
echo "你好,脚本"
#! 后面跟解释器的绝对路径。想更通用可以写成 #!/usr/bin/env bash,它会按 PATH 去找 bash。
两种执行方式
方式一,直接用解释器跑,不需要执行权限:
bash hello.sh
方式二,先给文件加执行权限,再像命令一样跑:
chmod +x hello.sh
./hello.sh
chmod +x 的意思如 §41 所述,是给文件加上”可执行”权限位。./ 表示”在当前目录找这个文件”。
Warning给
.sh文件chmod +x并运行前,先确认脚本内容是你写的、或你信任的来源。网上下载的脚本直接加权限运行,可能删库跑路。看不懂就别跑。
注释
# 开头的内容是注释,Shell 会忽略它。注释是写给人看的,讲清”为什么这么写”:
#!/bin/bash
# 这是注释,不会被执行
echo "这行会被执行"
变量
变量存一段数据。赋值号两边不要留空格,这点 bash 很挑剔:
name="小明" # 定义变量
echo "$name" # 引用变量,打印:小明
readonly age=18 # 只读变量,不能再改
变量名区分大小写,NAME 和 name 是两个东西。想删掉一个变量用 unset name。
环境变量(如 §76 所述)要用 export 导出才能传给子进程。脚本里普通变量默认只在当前脚本内有效。
引号的区别
双引号里变量会被展开,单引号里原样输出:
echo "家目录:$HOME" # 变量被替换成实际路径
echo '家目录:$HOME' # 原样打印 $HOME 四个字符
引用变量时请养成加双引号的习惯。否则文件名里带空格会被拆成多个词:
file="我的 文档.txt"
cat $file # 被拆成「我的」和「文档.txt」两个参数
cat "$file" # 正确,当作一个文件
小结:脚本 = 命令清单 + shebang。变量引用加引号防分词,chmod +x 前先看清楚内容。