Shell操作与简易编程(五)

原创 2004年09月22日 14:04:00

标准输入与输出

执行一个Shell命令行时通常会自动打开3个标准文档,即标准输入文档(stdin),通常对应终端的键盘;标准输出文档(stdout)和标准错误输出文档(stderr)都对应终端的屏幕。进程将从标准输入文档中得到输入资料,将正常输出资料输出到标准输出文档,而将错误信息送到标准错误文档中。

  我们以cat命令为例。cat命令的功能是从命令行给出的文件中读取资料,并将这些资料直接送到标准输出。若使用如下命令

  # cat config

  将会把文档config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取资料,并将其送到标准输出。例如:

  # cat

  Hello world

  Hello world

  Bye

  Bye

  用户输入的每一行都立刻被cat命令输出到屏幕上。

  另一个例子,命令sort按行读入文档正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。

  # sort

  bananas

  carrots

  apples

  apples

  bananas

  carrots

  这时我们在屏幕上得到了已排序的采购单。直接使用标准输入/输出文档存在以下问题:

  输入资料从终端输入时,用户输入的资料只能用一次。下次再想用这些资料时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。输出到终端屏幕上的信息只能看不能动。我们无法对此输出做更多处理,如将输出作为另一命令的输入进行进一步的处理等。为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

  1.输入重定向

  输入重定向是指把命令或可执行程序的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。例如,命令wc统计指定文档包含的行数、单词数和字符数。如果仅在命令行上键入:

  # wc

  wc将等待用户告诉它统计什么,这时Shell就好像死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下【Ctrl+D】,wc才将命令结果显示在屏幕上。如果给出一个文档名作为wc命令的参数,如下例所示,wc将返回该文档所包含的行数、单词数和字符数。

  # wc /etc/passwd

  20 23 726 /etc/passwd

  另一种把/etc/passwd文档内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:

  # wc < /etc/passwd

  20 23 726

  另一种输入重定向称为here文档,它告诉Shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一对分隔符号(分隔符号是由<<符号后的单词来定义的,本例中我们用eof来表示)之间的正文作为标准输入定向给命令。下例将一对分隔符号eof之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。

  [root@mail root]# wc << eof

  > hello

  > world

  > are you here?

  > eof

  3 5 26

  在<<操作符后面,任何字符或单词都可以作为正文开始前的分隔符号,本例中使用eof就作为分隔符号。here文档的正文一直延续到遇见另一个分隔符号为止。第二个分隔符号应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符号)将重新定向送给命令wc作为它的标准输入。

  由于大多数命令都以参数的形式在命令行上指定输入档的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受档名作为输入参数的命令,而需要的输入内容又存在一个文档里时,就能用输入重定向解决问题。

Shell操作与简易编程(五)

 标准输入与输出执行一个Shell命令行时通常会自动打开3个标准文档,即标准输入文档(stdin),通常对应终端的键盘;标准输出文档(stdout)和标准错误输出文档(stderr)都对应终端的屏幕。...
  • ealpha
  • ealpha
  • 2004年10月14日 12:46
  • 874

Shell操作与简易编程(四)

 Shell特殊字符通配符  通配符用于模式匹配,如文件名匹配、路径名搜索、字串查找等。常用的通配符有(*),(?)和括在方括号[ ]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成...
  • ealpha
  • ealpha
  • 2004年10月14日 12:45
  • 707

Shell操作与简易编程(一)

Shell是Linux系统下的命令解释器,也是使用Linux系统的主要环境,Shell的功能很多,主要从Shell的基本概念、Shell的种类、Shell中的特殊字符、重定向以及Shell程序几个方面...
  • FlyHope2005
  • FlyHope2005
  • 2004年09月22日 13:51
  • 1565

Shell操作与简易编程(四)

Shell特殊字符通配符  通配符用于模式匹配,如文件名匹配、路径名搜索、字串查找等。常用的通配符有(*),(?)和括在方括号[ ]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成一...
  • FlyHope2005
  • FlyHope2005
  • 2004年09月22日 14:03
  • 1252

Shell操作与简易编程(六)

Linux的Shell编程其实作为命令语言互动式地解释和执行用户输入的命令只是Shell功能的一个方面,Shell还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的程序控制结构。使用She...
  • FlyHope2005
  • FlyHope2005
  • 2004年09月22日 14:07
  • 1832

Shell操作与简易编程(六)

     Linux的Shell编程其实作为命令语言互动式地解释和执行用户输入的命令只是Shell功能的一个方面,Shell还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的程序控制结构。...
  • ealpha
  • ealpha
  • 2004年10月14日 13:51
  • 870

Shell操作与简易编程(二)

                                               几种流行的Shell   目前流行的Shell有ash, bash, ksh, csh, zsh等,你可以...
  • FlyHope2005
  • FlyHope2005
  • 2004年09月22日 13:57
  • 1352

Shell操作与简易编程(三)

Shell基础命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或Tab隔开,格式如下:$ 命令 选项 参数选项是包括一个或多个字母的代码,它前面有一个...
  • FlyHope2005
  • FlyHope2005
  • 2004年09月22日 14:00
  • 1305

五猴分桃问题代码

问题:*五只猴子一起摘了一堆桃子,因为太累,决定先睡一觉再分。 *过了不知多久,来了一只猴子,它见别的猴子没来,便将一堆桃子平均分成 5 份,结果*多了一个,就将多的这个吃了,拿走其中的一堆。 *...
  • fyyaom
  • fyyaom
  • 2011年04月15日 22:36
  • 315

Shell 操作(五)

环境变量 (1)查看环境变量[root@zhang ~]# env 随机数(RANDOM)RANDOM 是随机数的变量。目前大多数的 distributions 都会有随机数生成器,那就是 /dev/...
  • lanchunhui
  • lanchunhui
  • 2016年04月20日 10:30
  • 472
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Shell操作与简易编程(五)
举报原因:
原因补充:

(最多只允许输入30个字)