数据流重定向和命令判断符(&&)(||)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_37964071/article/details/79702730

数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他的地方,例如文件或者是设备。如果我们想要将某些数据保存下来,就很有用了。
我们什么时候需要呢?
1、屏幕输出的内容很重要,而且我们需要将它存起来
2、后台执行的程序,不希望他干扰屏幕的正常输出结果
3、一些执行命令的可能已知错误信息,想忽略掉时。
4、错误信息与正确信息需要分别输出时。

一、数据流重定向

1、standard output和standard error output
我们执行一个命令的时候,这个命令可能会由文件读入数据,经过处理之后,再将数据输出到屏幕上。
我们先了解一下标准输出(standard output)和标准错误输出(standard error output),这两个命令默认都是输出到屏幕上。

标准输出:指的是命令执行所回传的正确的信息。
标准错误输出:命令执行失败后,所回传的错误信息。

这样的话,不管错误还是正确,都会输出到屏幕上,如果我们只想看到正确的或者错误的信息,该怎么办呢?这就要用到数据流重定向了。

数据流重定向可以将标准输出和标准错误输出,分别传送到其他的文件或设备去,而分别传送所用的特殊字符有:

1)、标准输入(stdin):代码为0,使用<或<<;
2)、标准输出(stdout):代码为1,使用>或>>;
3)、标准错误输出(stderr):代码为2,使用2>或2>>;

eg,ll后,屏幕并无输出,因为本应显示的数据已经被导向了一个新建的文件rootfile:


该文件的创建方式为:

         1)该文件若不存在,系统会自动将它创建起来

         2)当文件本就存在,那么系统就会先将文件内容清空,然后再将数据写入

也就是说,利用数据重定向符>输出到一个已存在的文件中,那么文件就会被覆盖。


那么?如果我们不想让其覆盖呢?就可以利用(>>)即可,

也就是说,>>的作用是:数据重定向时系统会主动创建这个文件,若已存在,则数据会累加到此文件的最下方。

上面说的是标准输出的正确数据,如果是标准错误输出呢?上文说过它的代码是2,因此还是覆盖(2>)和累计(2>>)。

看一个例子:
用一般账号查看/home下面是否有.bashrc的文纪存在

如图,因为我们还有其他用户,比如上图中的maomaochong,这个账号的文件夹是进不去的,这就是标准错误输出。

如果我们需要将输出的正确结果与错误结果输出到不同的文件中,如下图:
将输出重定向到文件里,这里终端是没有输出的,查看文件内容,分到了不同的文件里。

若我们想将错误正确的信息都输出到一个文件中呢?用一个特殊写法,如下图:

2、/dev/null---垃圾桶黑洞设备
如果我们要将错误信息忽略该怎么办呢?/dev/null可以吃掉任意导向它的信息,
和上例子对比,将错误信息定丢弃,显示正确信息。

3、standard input:<与<<

简单来说,就是将原本需要由键盘输入的数据改由文件内容来代替。
eg:

例子中,主动创建了catfile文件,内容就是我们输入的内容(输入完毕ctrl+d结束输入),相当于输出重定向到catfile文件

然后,用catfile文件的内容来代替键盘的输入,也就是输入重定向。
那么<<是什么意思呢?它代表的是结束输入的意思。

和上例进行比较:
输入完毕,再输入eof,回车就可以结束输入,不需要上面的ctrl+d。

二、命令执行的判断依据:  ;&&   ||
在某些情况下,我们想要一次输入去执行一些命令,该如何呢?

1、(;)---不考虑命令相关性的连续命令执行

在命令与命令之间用(;)隔开,分号前的命令执行完后就会立即执行后面的命令。
若我想要创建一个文件,若存在就不创建了,就要使用&&和||了。

2、命令回传码(&?)、(&&)和(||)

如果两个命令有相依性,而相依性主要判断的地方在于前一个命令执行的结果是否正确。如下图所示:
eg:

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页