尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Bash 脚本文件结构详解:.sh 文件创建、Shebang 与执行机制(Introduction to Bash Scripting)

Bash 脚本文件结构详解:.sh 文件创建、Shebang 与执行机制(Introduction to Bash Scripting) Bash 脚本文件结构详解.sh 文件创建、Shebang 与执行机制Introduction to Bash Scripting【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting本篇指南聚焦于开源电子书Introduction to Bash Scripting仓库 README.md 所介绍的开源 Bash 脚本入门指南中关于 Bash 脚本文件结构的基础章节系统讲解如何创建.sh脚本文件、为什么脚本第一行必须写 shebang、#!/bin/bash与#!/usr/bin/env bash的区别以及脚本从创建到可执行的完整流程。读完本文你将掌握搭建任意 Bash 脚本骨架的能力并能结合仓库自带的 shellcheck 校验脚本写出规范、可移植的脚本文件。从一个.sh文件开始Bash 脚本本质上就是一个纯文本文件约定俗成地使用.sh作为扩展名。以本仓库电子书示例文件devdojo.sh为例创建它的方式有两种方式一使用touch命令直接创建空文件touch devdojo.shtouch会在当前目录下创建一个空文件。如果文件已存在touch只会更新其时间戳而不会清空内容。方式二使用文本编辑器直接新建nano devdojo.shnano是 Linux 终端里最常见的轻量级文本编辑器输入上述命令后会进入编辑界面保存并退出Ctrl O保存Ctrl X退出即完成文件创建。你也可以使用vim、VS Code 或 Sublime Text 等其他编辑器。需要说明的是.sh扩展名并非强制要求——Linux 判断一个文件是否为脚本靠的是文件内容尤其是第一行的 shebang和可执行权限而不是扩展名。但使用.sh扩展名能帮助人与工具快速识别文件类型这也是本仓库所有电子书章节示例统一采用的习惯。第一行Shebang 是什么为什么必须有要用 Bash 解释器执行脚本脚本文件的第一行必须写清楚 bash 可执行文件的绝对路径#!/bin/bash这一行被称为Shebang。它由两个部分组成#!称为 hash bang 或 shebang是这一特殊行的标记/bin/bash指向 Bash 解释器可执行文件的绝对路径。Shebang 的全部作用就是告诉操作系统当这个文件被当作可执行程序直接运行时请用/bin/bash这个程序来执行它。操作系统内核在解析可执行文件时如果发现文件开头是#!就会取出后面的路径作为解释器并把脚本文件本身作为参数传给该解释器。这正是脚本文件与普通文本文件的本质区别有了正确的 shebang脚本才能被系统直接当作命令来运行。#!/bin/bash与#!/usr/bin/env bash哪种更稳妥#!/bin/bash是最常见、最直接的写法它在绝大多数 Linux 发行版上都成立。但 Bash 并不总是安装在/bin/bash这个固定位置在以下场景中路径可能不同非 Linux 系统如 macOS 或各类 BSDLinux 上以可选软件包方式单独安装的 Bash通过包管理器安装到/usr/local/bin等自定义前缀目录。针对这种不确定性更稳妥的写法是#!/usr/bin/env bashenv命令会按照环境变量PATH中列出的目录顺序去搜索名为bash的可执行文件找到后便用它来运行脚本。换句话说#!/usr/bin/env bash的效果等价于在 PATH 里找出 bash 并执行这让脚本在不同系统间具备更好的可移植性。两种写法各有取舍写法优点适用场景#!/bin/bash路径固定、直白、启动开销极小绝大多数标准 Linux 发行版#!/usr/bin/env bash可移植性好按PATH自动定位跨平台、非标准安装路径、macOS/BSD注意事项#!/usr/bin/env bash的可用性取决于env是否位于/usr/bin/env在主流 Linux 和 macOS 上都成立并且运行时PATH中必须包含 bash 所在目录。如果你的脚本需要严格控制解释器版本直接写绝对路径反而更可靠。写好骨架之后让脚本真正可执行光有 shebang 还不够脚本还需要可执行权限才能以./devdojo.sh的形式直接运行。在 Bash Hello World 章节 中给出了完整流程——先写入内容#!/bin/bash echo ¡Hola Mundo!然后赋予可执行权限chmod x devdojo.sh最后运行./devdojo.sh屏幕上就会打印出¡Hola Mundo!。这里的./是显式指定当前目录下的文件因为当前目录通常不在PATH中详见 Common Bash Errors 章节 对 command not found 的分析。如果不想或不能修改文件权限还可以绕过可执行位、直接把文件交给解释器bash devdojo.sh这种方式不依赖 shebang也无需chmod x相当于显式告诉 bash 去解释执行该文件。两种执行方式的本质区别在于./devdojo.sh由操作系统读取 shebang 决定解释器要求文件有可执行权限bash devdojo.sh由用户显式指定解释器对文件权限要求更低。结构细节相关的常见错误与排查脚本结构上的小疏漏会引发让人困惑的报错这里结合 025-common-bash-errors-and-fixes.md 总结两个与本主题强相关的典型问题1.bad interpreter: /bin/bash^M: No such file or directory在 Windows 上编辑过的脚本常带有 CRLF 行尾\r\n多余的\r会黏在/bin/bash后面导致内核找不到解释器。修复方式是用dos2unix转换行尾或在 Linux 上用nano/vim重新保存。2.Permission denied文件缺少可执行权限运行chmod x devdojo.sh即可解决。这是第一次运行脚本时最容易踩的坑。用仓库自带的 shellcheck 脚本验证你的脚本结构本仓库在 scripts/shellcheck-ebook.sh 中提供了一个非常有参考价值的质量校验工具它会自动抽取ebook目录下所有 Markdown 文件中的bash代码块逐段写入临时.sh文件写入时统一以#!/bin/bash开头见脚本中printf #!/bin/bash\n%s\n $block_content的实现然后调用 shellcheck 静态检查每个代码块。该脚本默认检查ebook/en/content目录运行方式./scripts/shellcheck-ebook.sh [ebook_dir]它通过set -euo pipefail严格模式启动并针对教学代码片段排除了若干非致命的 shellcheck 规则如SC2034、SC2154、SC2145等注释中说明了每条规则的排除原因。这个脚本从侧面印证了两个重要事实shebang 是代码块可执行性的先决条件校验工具在检查每个片段前都会先补上#!/bin/bash说明一段结构完整的 Bash 代码必须搭配正确的 shebang 才是可运行的脚本结构严谨性可被自动化验证即使只是电子书中的示例片段也可以用 shellcheck 保证语法与最佳实践合规。对于自己的脚本你可以在终端直接运行shellcheck your_script.sh完成同样的静态检查详见 013-debugging-and-testing.md 中的调试与测试建议。小结一个标准 Bash 脚本文件的完整结构综合本仓库 002-bash-structure.md英文完整版 与前述章节一个结构规范的 Bash 脚本文件应当包含以下要素首行 shebang#!/bin/bash追求可移植性时用#!/usr/bin/env bash脚本内容echo、变量、循环等命令按顺序编写空白行与注释用于提升可读性可执行权限chmod x后即可通过./devdojo.sh直接运行也可用bash devdojo.sh显式执行静态校验用shellcheck检查语法与常见陷阱。掌握了这个骨架之后就可以继续深入本电子书的后续章节依次学习 变量、用户输入、注释、参数、数组 与条件表达式等主题一步步把空骨架填成功能完整的自动化脚本。【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表