点击返回 自学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即可结束。

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

1.2 STDOUT 

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

举例1:
使用输出重定向 > 来改变输出

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

1.3 STDERR

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

2. 重定向错误

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

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

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

3. 重定向输出

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

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

3.1 临时重定向行输出

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

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

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

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

自学Linux Shell14.1-理解输入输出的更多相关文章

  1. 自学Linux Shell11.4-重定向输入输出

    点击返回 自学Linux命令行与Shell脚本之路 11.4-重定向输入输出 Linux 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输 ...

  2. 自学Linux Shell14.2-在脚本中使用其他文件描述符

    点击返回 自学Linux命令行与Shell脚本之路 14.2-在脚本中使用其他文件描述符 在脚本中重定向输入和输出,并布局限于以上讲的3个默认的文件描述符,shell最多可以有9个打开的文件描述符.这 ...

  3. 自学Linux Shell14.3-创建临时文件

    点击返回 自学Linux命令行与Shell脚本之路 14.3-创建临时文件mktemp Linux系统保留了一个特殊的目录位置,以供临时文件使用.Linux使用/tmp目录处理不需要永久保存的文件. ...

  4. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

  5. 自学Linux Shell1.3-Linux文件系统

    点击返回 自学Linux命令行与Shell脚本之路 1.3-Linux文件系统 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多种目前流行的文件系统,如EXT2. EXT3. F ...

  6. 自学Linux Shell1.1-Linux初识

    点击返回 自学Linux命令行与Shell脚本之路 1.1-Linux初识(架构.内核.shell) 1. Linux架构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.(有 ...

  7. 自学Linux Shell3.3-列表命令ls

    点击返回 自学Linux命令行与Shell脚本之路 3.3-列表命令ls ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名. ...

  8. 自学Linux Shell4.1-监测程序ps top kill

    点击返回 自学Linux命令行与Shell脚本之路 4.1-监测程序ps top kill 1. PS命令 linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的 ...

  9. 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包

    点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...

随机推荐

  1. 在WPF中使用Caliburn.Micro搭建MEF插件化开发框架

    原文:在WPF中使用Caliburn.Micro搭建MEF插件化开发框架 版权声明:原创内容转载必须注明出处,否则追究相关责任. https://blog.csdn.net/qq_36663276/a ...

  2. Ubuntu16.04程序自启动

    试过修改/etc/rc.local文件,但是启动无效. 目前试过行之有效的方式如下: 参考:https://www.aliyun.com/jiaocheng/186625.html 在终端执行 gno ...

  3. synchronized和Lock的异同

    JAVA语言使用两种机制来实现堆某种共享资源的同步,synchronized和Lock.其中,synchronized使用Object对象本身的notify.wait.notifyAll调度机制,而l ...

  4. 【C#实现漫画算法系列】-判断 2 的乘方

    微信上关注了算法爱好者这个公众号,有一个漫画算法系列的文章生动形象,感觉特别好,给大家推荐一下(没收过广告费哦),原文链接:漫画算法系列.也看到了许多同学用不同的语言来实现算法,作为一枚C#资深爱好的 ...

  5. 【JVM.6】虚拟机类加载机制

    一.概述 虚拟机类加载机制:虚拟机把描述类的数据从Class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型. 与那些在编译时需要进行连接工作的语言不同 ...

  6. 支持自定义协议的虚拟仪器【winform版】

    首先,这个程序的由来,额,工作以来,做的最久的就是上位机,对市面上的大部分组态软件都感到不满,不好用,LabView虽然用起来不错,但是入门还是不够简单,刚好现在工作比较闲(已经不再做上位机了),所以 ...

  7. php5.6安装Zend Opcache扩展

    假设php5.6安装路径为/data2/php[root@nextcloud src]# pwd/usr/local/src[root@nextcloud src]# wget http://pecl ...

  8. linux-文件流4种读取方式

    第二种方式 第三种 第四种: 小括号在管道符的右边开辟了两个子进程 大括号在管道符的右边开辟了一个子进程, export 用来导出子进程的 num 还可以借助外部文件进行 七步扩展:

  9. C-代码笔记-输入输出

    .ACSII 字符实质和整数存储方式相同 //2018年9月16日01:35:54 # include <stdio.h> int main(void) { '; // printf(&q ...

  10. [BUAA软工]第一次结对作业

    [BUAA软工]结对作业 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 结对项目 我在本课程的目标: 熟悉结对合作,为团队合作打下基础 本次作业的帮助:理解一个c++ 项目的开发历程 ...