**Shell 参考手册**
Shell 是一种命令行解释器,它是操作系统与用户交互的主要界面,尤其是在类 Unix 和 Linux 系统中。它允许用户通过文本命令执行系统操作,编写脚本自动化任务,以及调用系统内核的服务。本文将深入探讨 Shell 的基本概念、常用命令和高级特性。
### 一、Shell 基础
1. **启动与退出**:在终端中,输入 `bash` 即可启动 Bash Shell。退出 Shell 可以使用 `exit` 命令。
2. **命令行接口**:用户在 Shell 提示符后输入命令,如 `ls`(列出目录内容)、`cd`(改变当前工作目录)等。
3. **命令历史**:按下 `Up` 键可以查看并重复使用之前输入的命令。
4. **环境变量**:如 `PATH`(定义查找可执行文件的路径),可以通过 `echo $PATH` 查看,`export` 命令可以设置或修改环境变量。
### 二、Shell 命令
1. **文件和目录操作**:`mkdir` 创建目录,`rmdir` 删除空目录,`rm -rf` 强制删除文件或目录,`cp` 复制文件,`mv` 移动或重命名文件。
2. **文本处理**:`grep` 在文件中搜索特定字符串,`sed` 进行流编辑,`awk` 处理结构化文本。
3. **流程控制**:`if` 语句、`for` 循环、`while` 循环用于条件判断和循环操作。
4. **管道和重定向**:`|` 管道将一个命令的输出作为另一个命令的输入,`>` 重定向输出到文件,`<` 读取文件内容作为命令输入。
### 三、Shell 脚本
1. **脚本结构**:脚本以 `#!/bin/bash` 开头,指定解释器。随后是命令和控制结构。
2. **变量**:声明变量如 `name="John"`,使用 `$` 符号引用变量值。
3. **函数**:定义函数如 `function greet() { echo "Hello, $name!" }`,并在脚本中调用。
4. **条件表达式**:`[[ ... ]]` 用于逻辑判断,如 `[[ -f file ]]` 检查文件是否存在。
5. **数组**:在 Bash 4.0 及以上版本支持数组,如 `arr=(one two three)`。
### 四、Shell 高级特性
1. **别名**:`alias ls='ls -l'` 定义别名,简化命令。
2. **函数式编程**:编写复杂脚本,实现功能模块化。
3. **过程子shell**:`()` 或 `(command)` 用于创建一个子shell执行命令,不影响父shell环境。
4. **命令替换**:`$(command)` 将命令的输出作为字符串。
5. **命令组**:`{ command1; command2; }` 一组命令按顺序执行。
### 五、Bash 特定特性
1. **扩展 globs**:`*` 匹配任意字符,`?` 匹配单个字符,`[abc]` 匹配字符集。
2. **历史扩展**:`!` 符号用于引用历史命令,如 `!ls` 表示上一次执行的 `ls` 命令。
3. ** Brace expansion**:`{1..10}` 扩展为 1 到 10 的序列。
4. **Shell 脚本调试**:`set -x` 启用命令行追踪,`set -v` 显示所有读取的输入行。
5. **errexit 选项**:`set -e` 使脚本在遇到错误时立即退出。
了解并熟练掌握 Shell,能极大提高你在类 Unix 系统上的工作效率。通过编写 Shell 脚本,你可以自动化日常任务,简化复杂的操作,甚至构建强大的系统工具。阅读《Shell 参考手册》(bashref-3.2.chm)将帮助你深入理解 Shell 的各个方面,成为真正的 Shell 大师。