Loading... <p><strong>大纲:</strong></p> <p><strong>一、数据重定向定义</strong></p> <p><strong>二、数据重定向分类</strong></p> <p><strong>三、数据重定向作用</strong></p> <p><strong>四、示例</strong></p> <hr /> <p><strong>一、数据重定向:</strong><span style="line-height: 1.5">命令的运行的结果默认输出在监视器上,重定向就是把这个结果输出到其它地方或其它文件。</span></p> <p><strong style="background-color: inherit">二、数据重定向分类:</strong></p> <p>1.标准输出: (standard output,简称stdout,<span style="font-family: 细明体">代码为 1 ,使用 > 或 >></span>):命令执行成功输出的正确提示信息。</p> <p>2.标准错误输出 (standarp error output,简称stderr,<span style="font-family: 细明体">代码为 2 ,使用 2> 或 2>> </span>):命令执行失败输出的错误提示信息。</p> <p>3.标准输入(standard input,简称stdin,<span style="font-family: 细明体">代码为 0 ,使用 < 或 << </span>):键盘键入值。</p> <p><strong style="background-color: inherit">三、作用:</strong></p> <p>1.保存屏幕输出信息。</p> <p>2.后台运行的程序,不希望它显示(例如:任务计划中监控程序每个时间段采集数据命令,可以直接重定向为/dev/null)。</p> <p>3.正确信息与错误信息分别输出。</p> <p><strong style="background-color: inherit">四、示例:</strong></p> <p><strong style="background-color: inherit">1.标准输出:<span style="line-height: 1.5"> (standard output,简称stdout,</span><span style="font-family: 细明体;line-height: 1.5">代码为 1 ,使用 > 或 >></span><span style="line-height: 1.5">):命令执行成功输出的正确提示信息。</span></strong></p> <p><strong>例1:</strong>查看/etc/inittab内容并重定向输出至/tmp/inittab.test.</p> <table cellpadding="2" cellspacing="0" width="600"> <tbody style="background-color: inherit"> <tr class="firstRow" style="background-color: inherit"> <td height="25" valign="top" width="579"> <pre class="brush:bash;toolbar:false">[root@localhost ~]# cat /etc/inittab > /tmp/inittab.test</pre> </td> </tr> </tbody> </table> <p>通过ls命令查看,发现/tmp目录下创建了inittab.test文件,且内容与/etc/inittab完全一致;由此可知,重定向输出指定的文件如果不存在,则创建此文件。</p> <table cellpadding="2" cellspacing="0" width="600"> <tbody style="background-color: inherit"> <tr class="firstRow" style="background-color: inherit"> <td height="25" valign="top" width="579"> <pre class="brush:bash;toolbar:false">[root@localhost ~]# ll /tmp/ | grep init -rw-r--r--. 1 root root 884 Jun 19 23:52 inittab.test</pre> </td> </tr> </tbody> </table> <p><strong style="background-color: inherit">例2</strong>:查看/etc/issue文件内容并把结果重定向至已存在的/tmp/inittab.test,你再次查看inittab.test,会发现文件内容已改变;由此可知:重定向输出指定的位置如果已存在,则覆盖。</p> <table cellpadding="2" cellspacing="0" width="600"> <tbody style="background-color: inherit"> <tr class="firstRow" style="background-color: inherit"> <td height="25" valign="top" width="579"> <pre class="brush:bash;toolbar:false">[root@localhost ~]# cat /etc/issue > /tmp/inittab.test [root@localhost ~]# cat /tmp/inittab.test CentOS release 6.5 (Final) Kernel \r on an \m</pre> </td> </tr> </tbody> </table> <p><strong style="background-color: inherit">例3:</strong>内容追加;查看/etc/inittab并把结果重定向追加至/tmp/inittab.test中,另外如果目标位置文件不存在,则创建。</p> <table cellpadding="2" cellspacing="0" width="600" style="width: 782px"> <tbody style="background-color: inherit"> <tr class="firstRow" style="background-color: inherit"> <td height="25" valign="top" width="579"> <pre class="brush:bash;toolbar:false">[root@localhost ~]# cat /etc/issue > /tmp/inittab.test [root@localhost ~]# cat /tmp/inittab.test CentOS release 6.5 (Final) Kernel \r on an \m . . . # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault:</pre> </td> </tr> </tbody> </table> <p><strong style="background-color: inherit">2.标准错误输出 (standarp error output,简称stderr,<span style="font-family: 细明体">代码为 2 ,使用 2> 或 2>> </span>):命令执行失败输出的错误提示信息。</strong></p> <p><strong style="background-color: inherit">例4:</strong>据例3可知,/tmp/inittab.test文件里面是有内容的,如下图,我们再次把/etc/inittab<span style="line-height: 1.5">重定向输出/tmp/inittab.test,当我们不小心把命令敲错了,把cat敲成了catt;cat一下,你会发现inittab.test里面没有任何内容了;由此可知,如果输出指定的文件已存在,</span></p> <p>即使命令执行错误,也会清空目标文件内容。</p> <pre class="brush:bash;toolbar:false">[root@localhost ~]# catt /etc/inittab > /tmp/inittab.test -bash: catt: command not found [root@localhost ~]# cat /tmp/inittab.test [root@localhost ~]#</pre> <table cellpadding="2" cellspacing="0" width="737" style="width: 782px"> <tbody> <tr class="firstRow"> <td height="25" valign="top" width="716"> <pre class="brush:bash;toolbar:false">[root@localhost tmp]# sh hardcheck.sh &> out_file stdout、stderr合并输出至out_file</pre> </td> </tr> </tbody> </table> <p><strong style="background-color: inherit">例5:</strong>合并重定向;如下两例,&表示合并的意思。</p> <pre class="brush:bash;toolbar:false">[root@localhost tmp]# sh hardcheck.sh > out_file 2> &1 stdout输出至out_file,std_err输出至stdout</pre> <table cellpadding="2" cellspacing="0" width="874" style="width: 796px"> <tbody> <tr class="firstRow"> <td height="166" valign="top" width="853"> <pre class="brush:bash;toolbar:false">[root@localhost tmp]# sh hardcheck.sh > /tmp/out_right 2>/tmp/out_err [root@localhost tmp]# cat /tmp/out_right model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz MemTotal: 1012352 kB [root@localhost tmp]# cat out_err hardcheck.sh: line 7: cd: /abd: No such file or directory [root@localhost tmp]#</pre> </td> </tr> </tbody> </table> <p><strong style="background-color: inherit">例6:</strong>分别重定向:<span style="line-height: 1.5">执行脚本,标准输出重定向至/tmp/out_right;标准错误输出重定向至/tmp/out_err;执行完成后,你会发现stdout、stderr已分别保存至/tmp/out_right、/tmp/out_err文件。</span></p> <p>黑洞/dev/null,黑洞,故名思义,可以吞噬其范围内的任何东西;如果我们把输出指向/dev/null,自然而然,输出会被吞噬。</p> <p><strong style="background-color: inherit">例7:</strong>把std指向out_right,stderr指向/dev/null;就会发现stderr会部被丢弃了。</p> <table cellpadding="2" cellspacing="0" width="600"> <tbody style="background-color: inherit"> <tr class="firstRow" style="background-color: inherit"> <td height="25" valign="top" width="579"> <pre class="brush:bash;toolbar:false">[root@localhost tmp]# sh hardcheck.sh > out_right 2> /dev/null [root@localhost tmp]# cat out_right model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz MemTotal: 1012352 kB [root@localhost tmp]#</pre> </td> </tr> </tbody> </table> <p><strong style="background-color: inherit">3.标准输入(standard input,简称stdin,<span style="font-family: 细明体">代码为 0 ,使用 < 或 << </span>):键盘键入值。</strong></p> <p><strong style="background-color: inherit">例8:把键盘输入值保存到/tmp/in_file。</strong></p> <table cellpadding="2" cellspacing="0" width="600" style="width: 782px"> <tbody style="background-color: inherit"> <tr class="firstRow" style="background-color: inherit"> <td height="25" valign="top" width="579"> <pre class="brush:bash;toolbar:false">[root@localhost ~]# cat > /tmp/in_file ==>in_file存在则覆盖,不存在则新建 this is test file. ==>键盘输入值保存值in_file hello.world! ==>输出完成后,可以通过快捷键Ctrl+d中止输入信号。 [root@localhost ~]# cat /tmp/in_file ==>查看保存后信息 this is test file. hello.world!</pre> </td> </tr> </tbody> </table> <p><strong style="background-color: inherit">例9:</strong><<表示结束输入字符,在stdin时,输入紧跟<<的字符表示结束输入的意思。</p> <table cellpadding="2" cellspacing="0" width="600"> <tbody style="background-color: inherit"> <tr class="firstRow" style="background-color: inherit"> <td height="25" valign="top" width="579"> <pre class="brush:bash;toolbar:false">[root@localhost ~]# cat > in_file <<end ==><<后代表结束输入字符 > hao are you! > Welcome! > end ==>输入end回车离开 [root@localhost ~]# cat in_file ==>查看in_file,只有输入的前两行 hao are you! Welcome!</pre> </td> </tr> </tbody> </table> <p><br style="background-color: inherit" /></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信