Shell 是一种广泛使用的操作系统外壳和脚本语言,其版本发展可以分为以下几个阶段:
- Bourne shell (sh) 通常称为 sh,由 Stephen Bourne 于 1977 年开发,是最早的 Unix shell
- Bash (Bourne-again shell) 由 Brian Fox 开发,是 Bourne shell 的一个向后兼容的替代品。它是 Linux 系统的默认 shell
- Korn shell (ksh) 由 David Korn 开发,是 Bourne shell 的另一个扩展版本。ksh 在交互性和脚本语言方面提供了改进
- Z shell (zsh) 是 Bourne shell 的另一个扩展版本,提供了更多的功能和改进,包括自动补全、主题自定义和插件等
- C shell (csh) 由 Bill Joy 开发,语法类似于 C 语言。csh 主要用于交互式使用,但不太适合编写脚本
<– more –>
Bash Shell 功能
history 记录
Bash history 是一个很有用的功能,它记录了你在 shell 中执行的命令并允许你查看和重复使用这些命令。
Bash history 的使用方法:
- 列出 history 中的命令:使用 history 命令可以显示最近执行的命令列表,每条命令都有一个编号
- 重新执行 history 中的命令:使用 ! 可以重新执行历史命令。例如,
!1234
会重新执行编号为 1234 的命令
- 搜索 history 中的命令:使用 Ctrl + R 可以搜索历史命令。输入关键字后,按
Ctrl + R
将会显示包含该关键字的最近命令
- 清除 history 中的命令:使用
history -c
可以清除当前 session 中的所有历史命令。如果要清除特定的命令,可以使用 history -d <编号>
- 控制 history 的长度:使用 HISTSIZE 和 HISTFILESIZE 环境变量可以控制 history 的长度。
Bash history 可以提高命令行效率,节省重复输入的时间,是 shell 用户的一个重要工具。Tab 补全
Bash 中的 Tab 补全(Tab completion)是一项非常有用的功能,可以节省输入时间并提高准确性。当你在命令行中输入文件名、目录名或命令时,按下 Tab 键可以自动完成输入内容。
Tab 补全的基本使用方法:
- 文件和目录补全:输入文件或目录的开头几个字符,然后按下 Tab 键。Bash 会显示匹配的文件和目录列表。如果只有一个匹配项,将自动完成输入
- 命令补全:输入命令的开头几个字符,然后按下 Tab 键。Bash 会显示匹配的命令列表。如果只有一个匹配项,将自动完成输入
- 命令选项补全:对于支持选项的命令,可以在输入选项名称的开头几个字符后按 Tab 键获取补全建议
Script 脚本
Bash Script 脚本是一系列 Bash 命令的文本文件,可以自动执行。Wildcard 通配符
Bash 中的通配符(Wildcard)是一种方便且强大的工具,可以用来匹配文件和目录名称的模式。最常用的通配符有以下几种:
*
:匹配零个或多个字符
?
:匹配一个字符
[character-range]
:匹配一个指定范围内的字符
[!character-range]
:匹配不在指定范围内的任意一个字符
下面是一些通配符的使用示例:
- 列出目录中所有以 file 开头的文件:
ls file*
- 列出目录中所有以 file 开头且后面跟随着数字的文件:
ls file[0-9]*
- 列出目录中所有的 .txt 文件:
ls *.txt
- 列出目录中所有的 .txt 文件,但不包括以 file 开头的文件:
ls [!f]*.txt
使用通配符可以简化命令的输入,实现强大的功能。
Bash 其他功能
变量中几种引号的差异
在 Bash 的变量使用中,常用到的引号包括单引号('
),双引号("
) 和反引号(`)。三者在变量使用中有不同的意义和结果:
- 双引号: 可以将字符串定义为字面量,但是与单引号不同的是,它会进行变量展开、通配符扩展和命令替换
- 单引号:
- 可以将字符串定义为一个字面量,意味着其值是直接指定的,不会进行变量展开、通配符扩展或命令替换
- 单引号也可以用于转义特殊字符,以免它们被解释为具有特殊意义的命令或通配符
- 在单引号中,可以使用多行字符串
- 反引号: 用于转义特殊字符,以免它们被解释为具有特殊意义的命令、通配符或其他字符