01 · Shell 基础与第一个脚本

2026.10.08 · 🟢

老师:kn | 目标:搞清 Shell 是什么、脚本怎么跑起来

🎯 今天要带走的三件事

  1. Shell = 用户与内核之间的命令解释器(一个 C 写的程序)
  2. 脚本第一行 #!/bin/bash 是告诉系统用哪个解释器
  3. 运行脚本两种方式:加执行权限 ./x.sh,或交给解释器 bash x.sh

一、Shell 是什么

  • Shell 是用 C 语言写的程序,是用户使用 Linux 的桥梁
  • 它既是命令语言(敲一行执行一行),又是程序设计语言(写成脚本批量执行)
  • Shell 脚本(shell script)= 为 shell 编写的脚本程序
  • ⚠️ 概念区分:shell 是程序本身,shell script 是脚本文件,日常口语混用但考试要分清

生活比喻

Shell 像餐厅的服务员:你(用户)点菜(敲命令),服务员去后厨(内核)下单,再把菜端回来。你不会直接冲进后厨。

二、常见 Shell 种类

Shell 路径 说明
Bourne Shell /bin/sh 最古老,Ken Thompson 的 sh
Bourne Again Shell /bin/bash ⭐ 本教程主角,多数 Linux 默认
C Shell /bin/csh 语法像 C
K Shell /bin/ksh 商业增强
Shell for Root /sbin/sh root 用

日常不区分 sh 和 bash,#!/bin/sh 也可写成 #!/bin/bash。

三、第一个脚本

新建 test.sh(扩展名不影响执行,见名知意即可):

#!/bin/bash
echo "Hello World !"
  • #! 是约定的标记(叫 shebang),告诉系统用哪个解释器
  • echo 在窗口输出文本

两种运行方式

方式 1:作为可执行程序

chmod +x ./test.sh   # 使脚本具有执行权限
./test.sh            # 执行

⚠️ 必须写 ./test.sh 而不是 test.sh。因为当前目录通常不在 PATH 里,直接写会去 PATH 找,找不到。

方式 2:作为解释器参数(不需要执行权限)

/bin/sh test.sh
/bin/php test.php

这种方式运行时,脚本第一行的 #!/bin/bash 写了也没用(解释器由命令行指定)。


🌙 今日作业

  • [ ] 亲手创建 test.sh,两种方式各跑一次,观察区别
  • [ ] 把 #!/bin/bash 改成 #!/bin/sh 再跑,结果一样吗?

自测题

  1. ./test.sh 和 test.sh 有什么区别?为什么前者才能跑?
  2. #!/bin/bash 这行是给谁看的?
  3. 用 /bin/sh test.sh 运行时,脚本第一行还有意义吗?
👉 参考答案 1. `./` 表示「在当前目录找」。不加的话系统只去 `PATH`(/bin、/usr/bin 等)里找,当前目录一般不在 PATH 中,故找不到命令。 2. 给**系统/内核**看的,告诉它用哪个解释器执行这个脚本。 3. 没有意义。命令行的 `/bin/sh` 已指定解释器,文件里的 shebang 被忽略。

🔗 关联

Shell-学习总览|下一课 → 02-变量与字符串