01 · Shell 基础与第一个脚本
老师:kn | 目标:搞清 Shell 是什么、脚本怎么跑起来
🎯 今天要带走的三件事
- Shell = 用户与内核之间的命令解释器(一个 C 写的程序)
- 脚本第一行
#!/bin/bash是告诉系统用哪个解释器 - 运行脚本两种方式:加执行权限
./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再跑,结果一样吗?
自测题
./test.sh和test.sh有什么区别?为什么前者才能跑?#!/bin/bash这行是给谁看的?- 用
/bin/sh test.sh运行时,脚本第一行还有意义吗?
👉 参考答案
1. `./` 表示「在当前目录找」。不加的话系统只去 `PATH`(/bin、/usr/bin 等)里找,当前目录一般不在 PATH 中,故找不到命令。 2. 给**系统/内核**看的,告诉它用哪个解释器执行这个脚本。 3. 没有意义。命令行的 `/bin/sh` 已指定解释器,文件里的 shebang 被忽略。🔗 关联
Shell-学习总览|下一课 → 02-变量与字符串