Bootstrap

Shell 脚本基础语法----重定向的使用

一、重定向

在了解重定向之前,我们先了解下在linux 里面,一条命令执行的过程

在linux 系统启动后,默认会打开3个描述符,分别是 :
  • 标准输入  standard input ,文件描述符用数字0表示    stdin 
  • 正确输出  standard output 1   文件描述符用数字1表示   stdout
  • 错误输出  standard error 2      文件描述符用数字2 表示   stderr 

一条shell 命令输入系统后,得到结果显示到我们的终端过程图如下:



首先, 标准输入,输入来自键盘,也可以是从文件中获取。
其次, 命令执行成功,则会把成功结果输出到屏幕, 称为正确输出 stanard output 1,默认输出到屏幕;
若命令执行不成功,则把错误结果输出到屏幕,称为标准错误输出 standard error 2,默认输出也是到屏幕。
这些系统内定的输入,输出命令执行方式,都是系统默认的。有时候我们在命令使用时,若不想命令的执行结果输出的屏幕,需要输入输出到制定文件或者设备,就需要使用输入、输出重定向。

linux shell 下常用到的输入、输出操作符为:
1、 标准输入  (stdin), 代码为0,使用  '<'或者 '<<'  ,  /dev/stdin
2、 标准输出   (stdout),代码1表示,使用 '>' 或者 '>>' ,   /dev/stdout
3、 标准错误输出 (stderr), 代码2 表示,使用 '2>'  或者 '2>>' , /dev/stdeer


     二  、输出重定向

​   1.  输出重定向,  1>   =  >
重定向最基本类型是将命令输出发送到一个文件中, 用shell 中的 ‘’> ‘’ 完成,命令格式:
         command > outputfile
   如下:

   重定向创建了一个date.log 文件,并将date命令输出结果写入到date.log 文件中
   如果,输出文件已经纯在了,重定向会将新的结果覆盖原先的数据;

  2、>>  :  追加式重定向
若不想覆盖文件,则采用 >> ,  追加到数据文件。

         

三、 输入重定向  '<'

​与输出重定向正好相反,输入重定向将文件的内容重定向到命令,用 ‘’< ‘’表示
     command  < inputfile 
注意: 命令总是在左侧,重定向符号, < ,总是指向 数据流动的方向。
WC ,统计文件中文本大小的计数,3个值分别是:
  •   文本的行数
  •   文本的词数
  •   文本的字节数


四、 错误重定向    '2>'

  1.  错误的命令结果重定向到文件  
          command  2> outputfile
      

  2 .  错误输出 追加到文件  
        command 2>> outputfile

  1.   错误输出到正确输出    2> 
如果有一种情况, 脚本执行时,既有正确输出,又有错误输出,两种输出结果都需要重定向到文件,该如何操作呢?
且看下面脚本例子 :    

[root@PengFay ~]# vim ifconfig.sh
  1 #/bin/bash   2 #ifconfig eno16777736   3   4 ifconfig eno16777736   5   6 1111111111111111

当执行脚本时,既有正确输出,又有错误输出,此时我们要将所有输出都重定向到 date.log 文件中去:




解析: >date.log   正确的结果输出到date.log    ,   2>&1   错误的结果,通过1>  正确输出通道也重定向到date.log中去。
          可以 简写为  &>  
            command 1>outputfile , 2>&1    ==   command &> outputfile




重定向操作方式总结 :


                                                 Bash 的重定向操作
  • 改变标准输入、标准输出、标准错误的方向
类型
操作符
用途
重定向标准输入
 <
将命令中接收输入的途径由默认的键盘更改为制定的文件
重定向标准输出
>

>>
将命令的执行结果输出到制定的文件中,而不是直接显示到屏幕上
追加
重定向标准错误
2>

2>>
将错误结果输出到指定文件中,覆盖掉原先的文件数据内容
将错误的结果追加到指定文件中
重定向标准输出和标准错误
&>
将标准输出,标准错误输出内容全部保存到文件中,而不是显示到屏幕上
;