首页计算机计算机软件Unix&Linux教程 15 第15章 标准IO:重定向和管道.pptx

15 第15章 标准IO:重定向和管道.pptx

页数:29页文件大小:86.3 KB来源: Unix&Linux教程ppt课件

本课件讲解Unix标准IO:初始与新设计准则、标准输入标准输出与标准错误、重定向标准输出与输入、防止文件被覆盖、文件描述符、子shell,以及管道线、分流与条件执行的写法。

第15章标准IO:重定向和管道封面,标示本章讲解的标准输入输出错误、重定向与管道线
本章需要解决的几个问题要点讲解,涵盖总结Unix的设计准则、什么是标准输入、什么是重定向等
15.1 Unix初始设计准则说明页,2个准则:-每个程序或者命令应该是一个工具,它只完成一件事情,但一定要完成好这件事情。
查看本课件的文字版(共 29 页,供检索与复制)

第1页:第15章标准IO:重定向和管道

本页为第15章标准IO:重定向和管道的章节封面,标示本章讲解的标准输入输出错误、重定向与管道线。

第2页:本章需要解决的几个问题

  • 总结Unix的设计准则
  • 什么是标准输入、标准输出和标准错误?
  • 什么是重定向?
  • 什么是管道线?

第3页:15.1 Unix初始设计准则

  • 2个准则:-每个程序或者命令应该是一个工具,它只完成一件事情,但一定要完成好这件事情。-当需要新工具时,最好对现有的工具进行组合,而不是编写一个新工具。(小的就是完美的)

第4页:15.2 Unix新设计准则

  • 初始设计准则的缺陷:-新工具层出不穷,使用者学习量大-无法完全胜任对用户日益增长的需求的处理表现在两个方面:1.小工具不满足需求;2.组合工具太复杂。-CLI的限制只能处理纯文本,只能使用命令行界面。

第5页:15.2 Unix新设计准则

Unix新设计准则
-除非程序无法更小,否则小的就是完美的。(有条件地妥协)

第6页:15.3标准输入、标准输出和标准错误

标准输入(stdin)
-读取数据的通用方法
标准输出(stdout)
-写出数据的通用方法
标准错误(stderr)
-写出错误消息的通用方法

第7页:标准输入、标准输出和标准错误:stdin

  • stdin、stdout、stderr的意义工具(命令)stdinstdoutstderr输入设备输入设备输出设备输出设备输出设备

第8页:15.4重定向标准输出

  • 重定向标准输出的定义-将标准输出发送给文件,称为重定向标准输出。-默认情况下,屏幕被设置成标准输出

第9页:重定向标准输出:将命令的输出覆盖到文

  • 将命令的输出覆盖到文件中-command>filename例如:ls > file1命令执行效果:如果不存在file1,则创建,并写入ls的输出内容;如果已存在file1,则清除其内容,写入ls的输出内容。

第10页:重定向标准输出:将命令的输出追加到文

  • 将命令的输出追加到文件尾-command>>filename例如:ls >> file1命令执行效果:如果不存在file1,则创建,并写入ls的输出内容;如果已存在file1,则将ls的输出内容追加到文件尾。

第11页:15.5防止文件被重定向替换或创建

  • 重定向时不替换已存在的文件-Bourne shell:set–o noclobber-C-Shellset noclobber

第12页:防止文件被重定向替换或创建

  • 临时忽略noclobber-Bourne shell:command>|filename-C-Shellcommand>!filename

第13页:15.6重定向标准输入

  • 将标准输入重定向为文件-command<filename-默认的标准输入是键盘

第14页:15.6重定向标准输入:$ sort

  • 例子$ sort < namesCasseyHarley$ sort < rawdate > report

第15页:文件描述符、Bourne shell家族

  • 文件描述符-在文件Unix进程中,每个输入源和每个输出目标都由一个唯一的数字标识,这个数字称为文件描述符(file descriptor)

第16页:文件描述符、Bourne shell家族

  • 文件描述符-Unix为每个进程预定义了3个文件描述符:含义文件描述符标准输入0标准输出1标准错误2

第17页:文件描述符、Bourne shell家族

  • Bourne shell中的重定向命令语法重定向方式command0<inputfile重定向标准输入command1>inputfile重定向标准输出command2>inputfile重定向标准错误

第18页:文件描述符、Bourne shell家族

  • 例子$ sort 0< rawdata$ sort < rawdata$ sort 1> results$ sort > results$ sort 2 > errors

第19页:15.8子shell

  • 父进程与副本进程-在传统的Unix环境下,有两个基本的操作用于创建和修改进程:1.函数fork( )用来创建一个新的进程,该进程是当前进程的一个副本,称为副本进程。2.函数族exec( )用来启动另外的进程以取代当前运行的进程。

第20页:子shell:子shell-子shell

  • 子shell-子shell是父shell的一个副本进程。

第21页:子shell:启动子shell的方

  • 启动子shell的方式-明确启动子shell如:$ bash-隐含启动子shell如:(date)启动一个子shell,并执行date。()中可以有多个命令,这些命令被称为一个编组(grouping)。

第22页:15.9在C-Shell中重定向标准错误

  • 语法定义command>&outputfilecommand>>&outputfile
  • 临时忽略noclobber(noclobber能防止在重定向输出时意外地覆盖一个文件)command>&!outputfilecommand>&!outputfile

第23页:在C-Shell中重定向标准错误

  • 存在的问题使用>&或>&!时,shell会同时重定向标准输出和标准错误。
  • 解决方法(command>outputfile) >&errorfile例如:(sort > output) >& errors

第24页:15.10组合标准输出和标准错误

  • 将标准输出和标准错误重定向到同一位置-C-Shell:默认支持-Bourne shell:commandx>outputfile y>&xx,y是文件描述符例如:sort 1> output 2>&1sort 2> output 1>&2command>&outputfile简化

第25页:15.13管道线

  • 管道与管道线-shell允许创建一个命令序列,在这个序列中,前一个命令的标准输出可以自动发送给下一个命令的标准输入。两个命令之间的连接就是管道(pipe),命名序列本身被称为管道线(pipeline)

第26页:15.13管道线:$ ls | less

  • 例子$ ls | less$ cat f1 f2 f3 | grep Harley

第27页:15.14管道线分流

  • 什么是管道线分流-同时将命令的输出发往两个地方
  • 管道线分流命令-tee[-a]file…例如:$ cat f1 f2 | tee d1 d2 | grep Harley$ who | tee status

第28页:15.16条件执行

  • 条件执行的两种方式-前一条命令执行成功,才执行其后的命令command1&&command2-前一条命令执行失败,才执行其后的命令command1||command2

第29页:条件执行:$ grep Harley

  • 例子$ grep Harley people && sort people$ update || echo “update failed!”
顶部目录