概论
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
💬 评论