概论

shell是我们通过命令行与操作系统沟通的语言。

shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。

AC Terminal中的命令行可以看成是一个“shell脚本在逐行执行”。

Linux中常见的shell脚本有很多种,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • zsh

Linux系统中一般默认使用bash,所以接下来讲解bash中的语法。

文件开头需要写#! /bin/bash,指明bash为脚本解释器。

ℹ️原理说明:shell 与内核的关系

操作系统的**内核(kernel)**负责真正的工作——管理内存、进程、硬件;用户并不能直接操作内核,而是通过 shell 把输入的命令翻译成系统调用交给内核执行,再把结果返回到终端。“shell(壳)”这个名字正是相对于“内核”而言:包在内核外面的一层人机交互界面。

#! /bin/bash 这一行叫 shebang(又称 hashbang):# 在脚本里本是注释符,但内核在执行脚本时会读取首行 #! 之后的内容,用它指定的解释器来运行整个脚本。所以 shebang 必须在第一行、顶格写,写错了脚本就会用错误的解释器(甚至无法)执行。

学习技巧

不要死记硬背,遇到含糊不清的地方,可以在AC Terminal里实际运行一遍。

脚本示例

新建一个test.sh文件,内容如下:

#! /bin/bash
echo "Hello World!"
⚠️注意事项
  • 脚本文件建议用 .sh 后缀(约定俗成,不加也能运行)。
  • 在 Windows 下编辑过的脚本传到 Linux 可能因 CRLF 换行符 报错(/bin/bash^M: bad interpreter),可用 dos2unix test.sh 转换后再执行。
  • echo "Hello World!" 中的引号必须是英文半角引号,中文全角引号(“”)会被 shell 当成普通字符原样输出。

运行方式

作为可执行文件

chmod +x test.sh  # 使脚本具有可执行权限
./test.sh  # 当前路径下执行

用解释器执行

bash test.sh

解释器执行不需要有可执行权限:

bash test.sh

直接执行的话,需要有可执行权限:

chmod +x test.sh
test.sh

项目分区导航shell语法 ⬅️ | 06-概论 | ➡️ 注释