01 概述
概述
常见的shell介绍
sh/bash/zsh/dash
1 Shell简介
概念
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
- 命令(与操作系统实时交互,工具软件,C语言实现的程序)
- 语言(进行程序设计,Linux各种软件本身是一个应用程序,也可以看做shell语言中的一个包!!!)
Shell的分类
- 主要介绍bash,其他shell基本兼容bash提供的语法。
1 | ➜ notes git:(master) ✗ cat /etc/shells |
常用快捷键
| 快捷键 | 作用 |
|---|---|
| ctrl+A | 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。 |
| ctrl+E | 把光标移动到命令行结尾。 |
| ctrl+C | 强制终止当前的命令。 |
| ctrl+L | 清屏,相当于clear命令。 |
| ctrl+U | 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便 |
| ctrl+K | 删除或剪切光标之后的内容。 |
| ctrl+Y | 粘贴ctrl+U或ctul+K剪切的内容。 |
| ctrl+R | 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。 |
| ctrl+D | 退出当前终端。 |
| ctrl+Z | 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理章节详细介绍。 |
| ctrl+S | 暂停屏幕输出。 |
| ctrl+Q | 恢复屏幕输出。 |
2 输入输出重定向
标准输入输出
| 设备 | 设备名 | 文件描述符 | 类型 |
|---|---|---|---|
| 键盘 | /dev/stdin | 0 | 标准输入 |
| 显示器 | /dev/stdout | 1 | 标准输出 |
| 显示器 | /dev/stderr | 2 | 标准错误输出 |
输入重定向
输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)
| 类型 | 符号(语法) | 功能 |
|---|---|---|
| 标准输入 | 命令<文件1 | 命令把文件1的内容作为标准输入设备 |
| 标识符限定输入 | 命令<<标识符 | 命令把标准输入中读入内容,直到遇到“标识符”分解符为止 |
| 输入输出重定向(同时使用) | 命令< 文件1 >文件2 | 命令把文件1的内容作为标准输入,把文件2作为标准输出。 |
输出重定向
输出重定向:(通俗的讲,重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示屏),在linux中,默认的标准输出设备是控制台(或称为显示器),用户输出的信息默认情况下都会显示到控制台
| 类型 | 符号 | 作用 |
|---|---|---|
| 标住输出重定向 | 命令 > 文件 | 以覆盖方式,把命令的正确输出内容输出到指定的文件或设备当中 |
| 标住输出重定向 | 命令 >> 文件 | 以追加方式,把命令的正确输出内容输出到指定的文件或设备当中 |
| 标准错误输出重定向 | 错误命令2 > 文件 | 以覆盖方式,把命令的错误输出输出到指定的文件或设备当中 |
| 标准错误输出重定向 | 错误命令2 >> 文件 | 以追加方式,把命令的错误输出输出到指定的文件或设备当中 |
| 正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
| 正确输出和错误输出同时保存 | 命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
| 正确输出和错误输出同时保存 | 命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
| 正确输出和错误输出同时保存 | 命令 &>> 文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
| 正确输出和错误输出同时保存 | 命令 >> 文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 |
/dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃,俗称“黑洞”
3 命令执行
多命令执行
- ; 命令1 ;命令2 多个命令顺序执行,命令之间没有任何逻辑联系
- && 命令1 && 命令2 当命令1正确执行 , 则命 令 2 才 会 执 行当命令1执行不正确,则命令2才会执行 当命令1执行不正确(?=0),则命令2才会执行当命令1执行不正确(?≠0),则命令2不会执行
- || 命令1 || 命令2 当命令1执行不正确 , 则 命 令 2 才 会 执 行 当 命 令 1 正 确 执 行,则命令2才会执行当命令1正确执行,则命令2才会执行当命令1正确执行,则命令2不会执行
Shell脚本执行
编辑shell脚本
1 | [root@localhost ~]$ vim test.sh |
两种方式执行shell脚本
- 第一种方式:给文件添加执行权限,直接执行
1 | [root@localhost ~]$ chmod u+x test.sh |
- 第二种方式:通过bash命令
1 | [root@localhost ~]$ bash test.sh |
4 Shell中的字符串
可以从编译原理的角度解析shell中的元素
Shell只包含一种数据结构
- Shell中的一切都是字符串。
- 可以是单个字符串
- 可以是单引号’字符串’
- 可以是双引号”字符串”
- 空格回车可以将字符串分割成多个不同的token字符串
- 特殊字符可以将字符串分割成多个不同的token字符串
在bash中字符串只有三种作用变量/值/命令
- 变量字符串
- 包含
=的字符串,左边是变量名,右边是值,也是字符串 - 使用
$标识的字符串,能够引用变量的值
- 包含
- 值字符串
- 值是一个普通字符串
- 命令字符串
- 使用
空格作为分隔符的字符串。第一个字符串是命令,后边的字符串是值字符串。
- 使用
字符串中包含特殊意义的符号
- 单引号、双引号
- 与变量和命令相关的特殊字符
= $ ${} 反引号 $() - 与命令相关的特殊字符
() [] {} - 注释
#
字符串中特殊的关键字
- if,for,while,case,then
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!




