理解输入和输出
1.两种显示脚本输出的方法。
(1)在显示器屏幕上显示输出。
(2)将输出重定向到文件中。
2.标准文件描述符
Linux 系统会将每个对象当作文件来处理,这包括输入和输出。Linux 用文件描述符来标识每个文件对象。
文件描述符是一个非负整数,唯一会标识的是会话中打开的文件。每个进程一次到最多可以打开 9 个文件描述符。
出于特殊目的,bash shell 保留了前 3 个文件描述符(0、1 和 2),
文件描述符缩写描述
- 0 STDIN 标准输入
- 1 STDOUT 标准输出
- 2 STDERR 标准错误
(1)STDIN
STDIN 文件描述符代表 shell 的标准输入。对终端界面来说,标准输入就是键盘。shell 会从STDIN 文件描述符对应的键盘获得输入并进行处理。
当在命令行中只输入 cat 命令时,它会从 STDIN 接收输入。输入一行,cat 命令就显示一行。
- $ cat
- this is a test
- this is a test
- this is a second test.
- this is a second test.
也可以通过输入重定向符强制 cat 命令接收来自 STDIN 之外的文件输入:
- $ cat < testfile
- This is the first line.
- This is the second line.
- This is the third line.
- $
(2)STDOUT
STDOUT 文件描述符代表 shell 的标准输出。在终端界面上,标准输出就是终端显示器。
shell的所有输出(包括 shell 中运行的程序和脚本)会被送往标准输出,也就是显示器。
大多数 bash 命令会将输出送往 STDOUT 文件描述符。
- $ ls -l > test2
- $ cat test2
- total 20
- -rw-rw-r-- 1 rich rich 53 2020-06-20 11:30 test
- -rw-rw-r-- 1 rich rich 0 2020-06-20 11:32 test2
- -rw-rw-r-- 1 rich rich 73 2020-06-20 11:23 testfile
- $
通过输出重定向符(>),原本应该出现在屏幕上的所有输出被 shell 重定向到了指定的文件。
也可以使用>>将数据追加到某个文件:
- $ who >> test2
- $ cat test2
- total 20
- -rw-rw-r-- 1 rich rich 53 2020-06-20 11:30 test
- -rw-rw-r-- 1 rich rich 0 2020-06-20 11:32 test2
- -rw-rw-r-- 1 rich rich 73 2020-06-20 11:23 testfile
- rich pts/0 2020-06-20 15:34 (192.168.1.2)
- $
STDOUT不会输出错误信息
- $ ls -al badfile > test3
- ls: cannot access badfile: No such file or directory
- $ cat test3
- $
(3)STDERR
shell 通过特殊的 STDERR 文件描述符处理错误消息。STDERR 文件描述符代表 shell 的标准错误输出。
shell 或运行在 shell 中的程序和脚本报错时,生成的错误消息都会被送往这个位置。