Bash Hello World 实战:用 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 Hallo Welt”(Bash Hello World)章节整理而成,面向第一次接触 Bash 脚本的开发者、系统管理员与 DevOps 工程师。读完本文,你将掌握从创建.sh文件、编写echo输出、赋予执行权限到以多种方式运行脚本的完整流程,并理解 Shebang 与脚本执行机制背后的原理。
前置准备:脚本文件与 Shebang 从何而来
在动手编写 Hello World 之前,你需要先准备两样东西:一个以.sh结尾的脚本文件,以及文件第一行的 Shebang 声明。这两步正是前一章“Bash 结构”所讲的内容,是当前 Hello World 章节的直接前置条件。
创建脚本文件有两种常用方式:
touch devdojo.sh或者直接用文本编辑器打开(不存在时会自动创建):
nano devdojo.sh要让 Bash 解释器识别并执行该文件,必须在脚本第一行写入可执行文件/bin/bash的绝对路径:
#!/bin/bash这一行被称为Shebang(又称 hashbang)。它告诉操作系统:这个脚本应当交由/bin/bash这个程序来解释执行,而不是当作普通文本文件处理。换句话说,#!/bin/bash只是操作系统调用解释器的一个“指令标记”,脚本真正的内容从第二行开始。
编写你的第一个 Hello World 脚本
现在重新打开devdojo.sh,在#!/bin/bash这一行之后加入echo命令,内容如下:
#!/bin/bash echo "Hello World!"逐行解读:
#!/bin/bash:Shebang,声明使用 Bash 解释器;echo "Hello World!":调用echo命令,把双引号中的字符串原样打印到标准输出(终端屏幕)。
保存并退出编辑器(在nano中是Ctrl+O保存、Ctrl+X退出)后,脚本文件就绪,接下来进入执行环节。
赋予执行权限:chmod +x 的必要性
脚本写好并不意味着可以直接运行。默认情况下,新建文件的权限并不包含“执行(execute)”位,因此需要先通过chmod命令为文件添加执行权限:
chmod +x devdojo.sh+x表示给文件所有者、所属组及其他用户都加上执行权限。这一步是“以./方式直接运行脚本”的必要前提——如果没有执行权限,系统会提示Permission denied。
运行脚本的两种典型方式
方式一:相对路径直接执行
./devdojo.sh./表示当前目录下的文件。执行后,你会在屏幕上看到:
Hello World!这种方式依赖 Shebang:内核读取文件第一行,找到/bin/bash,再让 Bash 来运行脚本剩余内容。
方式二:显式调用 Bash 解释器
bash devdojo.sh这种写法不依赖执行权限位和 Shebang——你直接把脚本文件作为参数传给bash命令,由 Bash 读取并执行。即使在文件没有+x权限、甚至第一行没有写 Shebang 的情况下,这种方式通常也能正常工作。
两种方式各有适用场景:./devdojo.sh更贴近“可执行程序”的语义,适合交付给用户运行的成品脚本;bash devdojo.sh更灵活,适合快速调试。
交互式 Bash:不写文件也能得到同样的输出
Bash 既是一种脚本语言,也是一种交互式 Shell。你不一定非要创建文件,直接在终端里敲入同一条echo命令,也能得到几乎一样的效果:
echo "Hallo DevDojo!"终端会立即打印:
Hallo DevDojo!这个例子说明:脚本文件里的每一行命令,本质上就是你平时在交互式终端里输入的命令。脚本的价值在于把它们“组合”并“自动化”起来。
为什么要写脚本:组合多个命令
单个echo命令确实看不出脚本的优势——它和直接敲命令没有区别。正如原文档所强调的:“把若干命令组装成一个脚本,只有在需要把多个命令组合在一起时才真正有用”。
设想这样的场景:先读取用户输入、再拼接字符串、再执行某个系统命令、最后把结果写到日志文件——如果每次都手动敲一遍,既繁琐又容易出错;而把它写进devdojo.sh并加上执行权限后,一行./devdojo.sh就能重复完成整串操作。这正是后续章节(Bash 变量、Bash 用户输入、Bash 参数 等)要逐步展开的内容。
为了直观感受“组合”的含义,可以提前看一个来自下一章变量的扩展示例——把变量嵌入 Hello World:
#!/bin/bash name="DevDojo" echo "Hallo, $name"运行后输出:
Hallo, DevDojo注意变量赋值name="DevDojo"时,=两边不能有空格;引用变量时用$name或更规范的${name}。这也印证了脚本从“静态输出”走向“动态逻辑”的第一步。
仓库中的工程化佐证
这个 Hello World 示例并非孤立的教学片段,而是整个开源仓库工程流程的一部分,可以从以下几处得到验证:
- 章节编排:该章节的英文原版位于 ebook/en/content/003-bash-hello-world.md,德语版即本文依据的 ebook/de/content/003-bash-hello-world.md,各语言版本内容一致,便于对照阅读。
- 代码质量校验:仓库提供了 scripts/shellcheck-ebook.sh,它会自动抽取各章节 Markdown 中的
bash代码块,逐块运行shellcheck静态检查(并针对教学性代码排除SC2034、SC2154等误报类规则),保证书中所有示例代码可运行、无警告——本文出现的echo、chmod、read等命令均在该脚本的校验覆盖范围内。 - 电子书构建:仓库通过 ebook/de/epub.yml 等配置文件,用 Pandoc 将
content/*.md汇总生成 ePub,再用 Ibis 生成 PDF(英文版成品见 ebook/en/export/)。这意味着你看到的每个章节都是最终电子书的一部分,示例与正文属于同一套内容源。
常见问题与排查要点
- 提示
Permission denied:说明没有执行权限,运行chmod +x devdojo.sh后再试。 - 提示
command not found:运行./devdojo.sh时请务必带上./前缀,否则系统会按PATH环境变量搜索可执行文件而找不到当前目录。 - 第一行不是
#!/bin/bash:用./方式运行可能出错或被其他 Shell 解释,确保 Shebang 位于文件第一行、顶格书写。 - 字符串里的引号:
echo "Hello World!"的双引号用于界定字符串;如果漏掉引号,Bash 会把Hello和World!当作两个独立参数,通常也能输出相同结果,但遇到空格、特殊字符时行为会不同,因此建议始终加引号。
小结
通过本指南,你已经完成了 Bash 脚本的“零的突破”:创建devdojo.sh、写入 Shebang 与echo、用chmod +x授权、以./devdojo.sh或bash devdojo.sh运行,还体验了交互式 Bash 的直接输出。这套“写文件 → 授权 → 执行”的流程,是之后学习变量、用户输入、参数、条件判断与循环等所有进阶主题的通用骨架。下一步,建议接着阅读同一仓库中的 Bash 变量 章节,把脚本从“固定输出”升级为“可定制输出”。
【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考