人人都会AI编程

脚本格式、Shebang 解释器声明

更新时间:2026-07-12

在 Linux 中,Shell 脚本就是一个纯文本文件,里面包含一系列命令,由特定的解释器逐行执行。为了让系统知道该用哪个解释器来运行这个脚本,脚本的第一行通常会写一个特殊的声明,称为 Shebang(也拼作 shebang,来自“sharp”# 和“bang”!)。

1. Shebang 的基本格式

#!/bin/bash
  • #! 必须出现在文件的最开头,前面不能有任何空格或空行。
  • 紧接着是解释器的绝对路径,例如 /bin/bash/usr/bin/python3/bin/sh 等。
  • 可以在路径后附加单个选项,例如 #!/bin/bash -e(遇错即退),#!/usr/bin/awk -f(从文件读取 awk 程序)。

完整的脚本示例:

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

2. 为什么需要 Shebang
当你运行一个可执行的文本文件时,内核会读取文件的前几个字节,检测到 #! 后,就会调用后面指定的解释器,并把脚本文件作为参数传给它。这样一来,你就不必每次都手动输入解释器的名字去执行脚本。例如,有了 #!/bin/bash,直接 ./myscript.sh 等价于调用 /bin/bash ./myscript.sh

如果没有 Shebang,或者指定了一个不存在的解释器路径,系统通常会使用当前 shell 去尝试解释执行,行为可能不可预期且容易出错。因此,明确声明解释器是良好习惯。

3. 常用 Shebang 示例

  • #!/bin/sh:使用系统默认的 POSIX shell(通常是 dash 或 bash 的兼容模式),适合追求最大可移植性的脚本。
  • #!/bin/bash:明确使用 Bash,支持 Bash 扩展语法(数组、[[ 条件测试等)。
  • #!/usr/bin/env python3:不硬编码解释器路径,而是从 PATH 环境变量中查找 python3。这种方法常用于跨平台脚本,因为 Python 的安装位置可能不同。
  • #!/usr/bin/perl#!/usr/bin/awk -f:也适用于其他解释型语言。

4. 可执行权限是前提
即便脚本文件内正确书写了 Shebang,也必须赋予该文件执行权限,才能以 ./script 的方式直接运行:

chmod +x myscript.sh
./myscript.sh

如果不加执行权限,直接 ./myscript.sh 会提示权限不足;此时你仍可以用 bash myscript.shsh myscript.sh 手动调用解释器来执行,但这其实绕过了 Shebang 的指定。

5. 实用注意事项

  • Shebang 行不应有尾随空格或多余的字符,否则解释器路径可能被误读。
  • 若脚本需要传递给解释器的参数不止一个,Shebang 只允许一个选项字符串。如需多个参数,通常用包装脚本或通过 /usr/bin/env 结合单独的 set 命令处理。
  • 在 Windows 系统上编写脚本再传到 Linux 时,务必注意换行符(CRLF vs LF)。如果文件以 \r\n 换行,Shebang 可能失效,导致奇怪的“未找到命令”错误。可以用 dos2unixsed -i 's/\r$//' 修复。

总的来说,Shebang 是每个 Shell 脚本的基本“身份标识”,它明确了由谁负责解释执行,是脚本工程化的第一步。