文章目录(Table of Contents)
简介
从这篇文章开始,我会开始介绍 shell
和 bash
的相关内容。如果想了解关于 Linux 基础的内容,可以参考链接,Linux 基础。本文会分为以下的几个内容来进行介绍:
- Shell 的介绍
- 常用的 Shell;
- 查看以及切换 Shell;
- Bash 的介绍
- 什么是 Bash;
- Bash 的特性;
- Bash 脚本的执行方式;
Shell 的介绍
关于 Shell
我们其实在 Linux
基础中有所介绍,Linux 中 Shell
与终端介绍。我们这里再介绍一下。Shell
是系统的用户界面,提供了用户和内核进行交互操作的一种接口。Shell 不是硬件,而是软件,是操作系统的操作界面。同时,Shell
也是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell
有自己的编程语言用于对命令的编辑,它允许用户编写由 Shell
命令组成的程序。
用户、Shell
及 Linux
系统内核之间的关系如下图:
常见的 Shell
Linux
中的 Shell
有多种类型,其中最常见的有 Bourne Shell(sh)
、C Shell(csh)
、Korn Shell(ksh)
。
Bourne Shell
是 Unix
最初始的 Shell
,并且在每种 Unix
上都可以使用,在 Shell
编程方面相当优秀,但在处理与用户交互上不如其它几种。
Bash(Bourne Again Shell)
是 Bourne Shell
的扩展,与 Bourne Shell
完全兼容,并且增加了许多特性,还包含了很多 C Shell
和 Korn Shell
中的优点,有灵活和强大的编程接口,同时又有友好的用户界面。
查看以及切换 Shell
查看主机上所有 Shell
:通过 cat /etc/shells
命令来查看主机上的 Shell
类型。
查看 Shell
版本:我们可以使用 echo $0
或是 echo $SHELL
来查看当前的 Shell
版本:
更改 Shell
版本:我们可以使用 chsh
命令来更换登录系统时使用的 Shell
。例如下面的例子将 Shell
切换为 zsh
:
- chsh -s /bin/zsh # 将 shell 切换为 zsh
Bash 介绍
上面我们对 Shell
进行了简单的介绍,这里我们介绍一下 Bash
相关的知识。这里主要分为以下几个点进行介绍,更多关于 Bash
的内容会在后续的文章进行介绍:
- 什么是
Bash
; Bash
的特性;- 脚本执行方式;
什么是 Bash
Bash
是 GNU Bourne-Again Shell
的缩写。因为是对 Bourne-Again Shell
功能的增强,所以 Bash
对于 Bourne shell(sh)
是一个双关语(Bourne again / born again
)。
Bourne shell
是早期重要的 Shell
,由史蒂夫 · 伯恩在 1978
年前后编写,并同 Version 7 Unix
一起发布。Bash
则是在 1987
年由布莱恩 · 福克斯创造。在 1990
年,Chet Ramey
成为了主要的维护者。
Bash 的特性
- 自动补全(TAB):
TAB
键可以自动补全命令或者补全路径。 - 命令历史记录(history):使用
history
来查看历史命令。这些命令是保存在~/.zsh_history
文件中的。同时可以使用「history -c
命令」来清除历史命令。 - 管道符以及重定向标准输入输出:常用的输入和输出如下:
- 输出重定向,使用
>
符号 - 追加内容可以使用
>>
- 输入重定向,使用
<
符号
- 输出重定向,使用
- 命令别名(alias):有很多长命令,我们可以使用简称来简化输入。例如现在有一个命令
echo MathPretty
我们使用 mp 来代替:
- alias mp='echo MathPretty' # 设置别称
- unalias mp # 删除别称
Bash 的注释
Bash
中的注释是以 #
开头的,例如下面我们创建一个简单的 Bash
脚本为 test1.sh
,其中第二行就是注释:
对于上面这个脚本:
- 第一行的
#!
是一个约定的标记,告诉系统这个脚本是用指定的解释程序来执行,这里使用的是/bin/zsh
。 - 第二行为注释,以
#
开头的内容为注释,注释是记录方式不会被程序所执行,一般用于记录其中内容这个脚本的作用与功能。
Bash 脚本执行方式
对于 Linux
来说,并不根据文件的扩展名来识别文件类型,这里的 .sh
只是为了让使用该脚本的人进行一个区分,类似于 Linux
中目录与文件的颜色不一致。
Bash
脚本有三种执行,我们使用上面的 test1.sh
作为例子:
source test1.sh
:使用 source 相当于将Bash
脚本中的内容复制到当前的 Shell 中执行。也就是如果Bash
脚本中定义了变量,运行完毕后使用echo
是可以查看当前变量的。./test1.s
h:这种方式需要确保Bash
脚本是一个可执行文件(可以使用 chmod +x test1.sh 添加可执行的属性)。这种方法会在当前Bash
中创建一个子Bash
运行这个脚本,运行完毕后这个子Bash
会自动退出;bash test1.sh
:这种方法与上面的方法一样,都会创建一个子Bash
运行这个脚本。不同的是这种方法不需要确保Bash
脚本是一个可执行文件。
每一个脚本或者命令执行完成之后都会有一个退出的状态,系统中一般只会记录上一个指令执行之后的退出状态,我们可以通过 echo $?
来获取这个状态值,常见的值有:
0
:表示上一个指令执行成功1
:表示未知的错误126
:表示命令无法执行127
:表示无效命令130
:表示通过Ctrl + C
退出命令
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论