每天三分钟搞定linux shell脚本(22) shell的输出

shell的输出

每天三分钟搞定linux shell脚本(22) shell的输出_第1张图片

之前接触的shell输出是把内容打印到屏幕或者重定向到文件中,这次对其原理介绍一下。

标准文件描述符

linux系统中一切皆文件,通过文件描述符来表示一个文件。之前经常接触的有3个,分别是标准输入0,标准输出1,标准错误2

1 标准输入

标准输入就是键盘的输入,不过也可以使用重定向用指定的文件来代替文件描述符。比如使用重定向输入到cat命令sort命令

cat < testfile
sort < testfile

2 标准输出

标准输出就是输出到显示器,不过也可以通过重定向输出到文件,比如

date > testfile
date >> testfile

这两个都是重定向,在testfile文件中能看到两行date输出的结果。但是,如果命令返回码$?非零,这个命令的输出结果就不能重定向到相应的文件中,比如

abcdef >testfile

结果为:

abcf:未找到命令

并且testfile文件中为空,并没有“abcf:未找到命令”这句话,看着像是重定向到文件的操作失败了,这里需要了解标准错误。

3 标准错误

默认情况下,标准错误是输出到屏幕上的。如果想要把错误也重定位到文件中,可以在重定位符号前面加上2这个数字,比如:

acbdef 2> testfile

运行后屏幕上什么都不显示,testfile中内容为:

未找到 'abcdef' 命令,您要输入的是否是:
命令 'abcde' 来自于包 'abcde' (universe)
abcdef:未找到命令

箭头前面的2意思是把标准错误重定向到testfile中
注意:如果夹杂着正确的命令和错误的命令,那么就需要把标准输出和标准错误都进行重定向,比如:

ll testfile abed 1> file1 2> file2

运行后,file1的内容为:

-rw-rw-rw- 1 aitian aitian 78 12月 22 22:54 testfile

file2的内容为:

ls: 无法访问'abed': 没有那个文件或目录

如果想要把标准输出和标准错误都输出到同一个文件中,可以使用&>进行重定向,比如

ll testfile abc &> file3

运行后,file3的内容为:

ls: 无法访问'abc': 没有那个文件或目录
-rw-rw-rw- 1 aitian aitian 78 12月 22 22:54 testfile

可以发现,错误日志被优先放到了前面。

你可能感兴趣的:(Linux,shell脚本)