Linux 操作系统:bash Shell

一、 概述

1. Shell 是什么?

Shell 说白了就是一个软件,他是用户和内核沟通的软件。因为操作系统的内核是驱动硬件工作的,为了避免一些软件或者操作对硬件系统造成干扰,导致系统宕机或出现其他问题,所有内核一般都是不给用户直接提供操作的。但是,有些时候我们还必须的通过内核来控制硬件,这时候 用 Shell 这个软件就是相当好用的,它就相当于用户和内核建立起来的一座桥梁。

因为早期各个软件厂商都有自己的 Shell,所有 Shell 不止只有一种。那么有多少 Shell 呢?你自己的 Linux 操作系统又支持哪些 Shell 呢?

这个 文件放置的就是你本机所支持的 Shell。

那么问题又来了,这么多 Shell,偏偏只学 bash Shell 呢?当然是因为 bash Shell 牛逼啦!哪牛逼啦?我随便举几个例子,剩下的好处可以去度娘问问,一抓一大把。

2. bash Shell 功能

所有 Linux 发行版,默认都是 bash Shell,只要学会所有 Linux 上都是通用的

命令记忆功能

命令、文件补全功能

别名设置

作业、后台、前台的控制

程序脚本

通配符

*本文以下所有的 bash Shell 都简称 Shell

二、 Shell 变量和操作

因为 Linux 操作系统只是说的是 Linux 内核,至于其他的你都可以想象为运行在内核之上的软件,Shell 也是一个程序,它就集成了一些内置命令,如 ,如 sed、awk 等这些命令,都是独立 Shell 之外的命令,所有称之为外部命令。 命令可以查看一个命令是否为 bash 内置命令。

1. type 参数

实例:

2. 变量操作

实例:

3. 系统变量

环境变量 = 全局变量

自定义变量 = 局部变量

*只列出几个比较重要的,其他系统变量使用 查看

三、 Shell 环境设置1. 别名设置

别名就是将一大串命令写成一个自定义命令,类似变量。和变量不同的是命令可以直接执行,而变量需要 输出。

上述别名在用户注销以后就失效了,如果创建永久别名,只需要将别名设置写到配置文件即可。

用户别名设置:~/.bashrc

系统别名设置:/etc/bashrc

设置完以后需要注销才可以生效,立即更新配置文件 或

2. 历史命令

3. 登录欢迎信息

终端机接口提示信息 tty1 ~ tty2

本地登录主机修改 /etc/issue

远程登录主机修改 /etc/issue.net

如果是远程登录,提示信息会显示 的内容。但是我在 Ubuntu 14.04 什么测试没有反应。不过没有关系,我们可以用另一个文件让用户登录以后取得的一些信息。

/etc/motd

如果没有这个文件就新建一个,然后将自己的信息写到这个文件即可。

4. 注销时执行完操作再退出

配置文件是注销 bash shell 时执行完操作再退出,默认情况下系统会帮我们清空屏幕后再退出,我们可以自己修改系统再我们退出时帮我们做的事,例如:退出时显示 “ByBy~” 的信息

5. shell 环境配置文件

login shell 取得 bash 完整的登录流程。如:tty1 ~ tty6 登录,需要输入账号、密码的 bash 登录方式就是 login shell

non-login shell 取得 bash 接口方法,不需要重复登录。如: X Windows 登录后,在打开终端就不需要输入账号、密码的 bash 登录方式就是 non-login shell

login shell

如果是以 登录,它会读取 和 这两个文件。

其实 文件只是其中一种默认配置文件,其他配置文件还有 ,这 三个只要有一个就可以,都有的话优先从左到右的顺序读取。

login shell 的配置文件读取流程(具体详细的操作过程请 man bash,这里不做过多介绍)

non-login shell

non-login shell 默认会读取

其他相关配置文件

在用户目录下一般会有如下 bash 相关配置文件

:历史命令配置文件

:注销配置文件,这个文件可以设置在注销后 bash 需要做些什么。如:把 echo "Bybe~" 写入到这个配置文件里面,用户在注销 bash 时候就可以看到 Bybe~ 这个信息

:login shell 登录配置文件

:non-login shell 登录配置文件

更新配置文件

或者

6. 终端机设置

7. 通配符

四、 数据流重定向

我们在执行一条命令的时候,处理结果会显示到屏幕,我们想把这些信息写到文件里面,数据流发生了变化,就称之为数据流重定向。

执行命令的时候有两种可能:

执行成功:标准输出(standard output)

执行失败:标准错误输出(standard error output)

1. 数据流重定向操作

当文件不存在是创建,存在时覆盖,使用 可以追加内容

当我们执行命令的时候,尤其是多条命令,执行成功或执行失败的都有,怎么样分辨出成功的还是失败的?就是利用代码判断。

标准输入:0

标准输出:1

标准错误输出:2

和 的默认代码是 1

2. 垃圾桶黑洞设备

如果不想错误信息显示或存储,就使用黑洞设备 ,他可以吃掉任何导向这个设备的信息

3. 同时将正确和错误的信息写到一个文件里面

或者

4. 标准输入

标准输入符,就是用文件代替要由键盘输入的数据

连续输入数据,结束符用户自己定义

四、双向重定向

有时候我们希望将输出数据既先到文件也在屏幕输出

实例:

五、命令执行判断依据1. 连续执行命令(不考虑命令的相关性)

2. 条件表达式

和 可以理解为编程语言中的逻辑与和逻辑或。因为命令执行判断特别像 C语言中的条件表达式,所以我就这样叫。

如下条件表达式:当 A 执行成功就执行 B,否则执行 C

实例

六、 管道1. 管道命令

管道命令只能处理标准输出正确的数据,对标准错误输出的数据没有直接处理的能力。而且在 后面必须能够接收标准输出的数据才可以,命令称之为管道命令。

2. 参数代换

都是一个相当牛逼的命令,我称之为流氓命令。本来管道定义的是只有管道命令才能用管道,但是这个 参数代换可以将不是管道的命令也能进行管道操作。

例如,kill 命令就不是一个管道命令,但是可以通过 xargs 将进程杀掉

3. 选取命令

4. 排序命令

5. 字符转换命令

6. 关于 的用途

命令输出数据可以写到文件里面,后续命令在读取这个文件。 的作用就是将 当做 ,这样就不需要在硬盘上新建文件了,常用于写 Shell Script 脚本程序中用到。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180224G0SVFV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券