自学Linux Shell14.1-理解输入输出

时间:2022-07-14 19:55:54

点击返回 自学Linux命令行与Shell脚本之路

14.1-理解输入输出(点击这里获得更多)

两种显示脚本输出的方法:

  • 在显示器屏幕上显示输出
  • 将输出重定向到文件中

1. 标准文件描述符

linux系统将每个对象当做文件处理,这包括输入和输出进程。
linux系统用文件描述符来标示每个文件对象。
文件描述符是一个非负整数,可以唯一标识会话中打开的文件。
每一个进程一次最多可以有9个文件描述符,处于特殊的目的,bash shell保留了前3个文件描述符(0,1,2),如下:

文件描述符 缩写 描述
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误输出
  • <:    从文件中读取内容。
  • >:    将内容插入到文件,每次插入前都会清空文件内容。
  • >>:  将内容插入到文件, 将内容追加到现有文件的末尾

1.1 STDIN 

对于终端界面来说,标准输入就是键盘。
shell从STDIN文件描述符对应的键盘获得输入,在用户输入时处理每个字符。
使用输入重定向符号<时,linux会用重定向指定的文件来替代标准输入文件描述符,它会读取文件并提取数据,如同在键盘输入的。
举例1:
cat命令处理STDIN输入的数据,输入一个就显示一个,按ctrl+c即可结束。
自学Linux Shell14.1-理解输入输出

举例2:
也可通过使用输入重定向符号 < 时,强制cat命令接受来自另一个非STDIN文件的输入,Linux会重写向指定的文件来替换文字的输入文件描述符。

1.2 STDOUT 

在终端界面上,标准输出就是终端显示器。
shell的所有输出会被定向到标准输出中,也就是显示器

举例1:
使用输出重定向 > 来改变输出
自学Linux Shell14.1-理解输入输出

自学Linux Shell14.1-理解输入输出

举例2:
使用输出重写向 >> 可以追加某个文件。

自学Linux Shell14.1-理解输入输出

自学Linux Shell14.1-理解输入输出

1.3 STDERR

Shell通过特殊的STDERR文件描述符来处理错误消息。标准的错误输出。
shell或shell中运行的程序或脚本出错时声称的错误消息都会发送到这个位置。
默认情况下,错误信息的输出也会显示到显示器的输出中。

2. 重定向错误

有几种办法实现:
第一种: 只重定向错误。STERR文件描述符被设成2,ls 查看一个/home目录不存在的文件将错误输出到file文件,屏幕上不会显示错误。
自学Linux Shell14.1-理解输入输出

第二种:重写向错误和数据,如果想重写向错误和正常输出,必须用两个重写向符号。STDOUT文件描述符被设为1,STERR文件描述符被设成2。

自学Linux Shell14.1-理解输入输出

第三种:  使用 &>  也可以将STDOUT STDERR的输出重定向到同一个输出文件,且输出的错误数据在最前面以便最近浏览错误信息

自学Linux Shell14.1-理解输入输出

3. 重定向输出

两种方法在脚本中重定向输出:

  • 临时重定向行输出
  • 永久重定向脚本中的所有输出 exec命令

3.1 临时重定向行输出

默认情况下,linux会将STDERR导向STDOUT。但是如果你在运行脚本时重定向了STDERR,脚本中所有导向STDERR的文本会被重定向。

3.2 永久重定向脚本中的所有输出 exec命令

如果脚本中有大量数据需要重定向,那重定向echo语句就会很繁琐,所以可以使用exec命令,它告诉shell在脚本执行期间重定向某个特定文件描述符。

自学Linux Shell14.1-理解输入输出

exec命令会启动一个新shell将STDOUT文件描述符重定向到文件testout中。