1. 注释符

在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。

此外还有一些特殊字符如:用于输入/输出重定向与管道的、 >和|;执行后台命令的&;命令执行操作符&&和||及表示命令组的{}将在下面各小节中加以介绍。

标准输入/输出和重定向

1. 标准输入与输出

我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件stdin),通常对应终端的键盘;标准输出文件stdout)和标准错误输出文件stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

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

  1. $ cat config  

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

  1. $ cat   
  2.  
  3. Hello world   
  4.  
  5. Hello world   
  6.  
  7. Bye   
  8.  
  9. Bye   
  10.  
  11.    
  12.  
  13. $  

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

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

  1. $ sort   
  2.  
  3. bananas   
  4.  
  5. carrots   
  6.  
  7. apples   
  8.  
  9.    
  10.  
  11. apples   
  12.  
  13. bananas   
  14.  
  15. carrots   
  16.  
  17. $  

这时我们在屏幕上得到了已排序的采购单。

直接使用标准输入/输出文件存在以下问题:

输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。

输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。

为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

2. 输入重定向

输入重定向是指把命令或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。

例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入:

  1. $ wc  

wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。

如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。

  1. $ wc /etc/passwd   
  2.  
  3. 20 23 726 /etc/passwd   
  4.  
  5. $  

另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令this text forms the content

>of the here document,which

>continues until the end of

>text delimter

>delim

4 17 98

在文件名。例如:

  1. $ ls > directory.out   
  2.  
  3. $ cat directory.out   
  4.  
  5. ch1.doc ch2.doc ch3.doc chimp config mail/ test/   
  6.  
  7. $  

将ls命令的输出保存为一个名为directory.out的文件。

注:如果>符号后边的文件已存在,那么这个文件将被重写。

为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。

如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符>>。形式为:命令>>文件名。例如:

  1. $ ls *.doc>>directory.out   
  2.  
  3. $ cat directory.out   
  4.  
  5. ch1.doc ch2.doc ch3.doc chimp config mail/ test/   
  6.  
  7. ch1.doc ch2.doc ch3.doc   
  8.  
  9. $  

和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>或追加符号2>>)表示对错误输出设备重定向。例如下面的命令:

  1. $ ls /usr/tmp 2> err.file  

可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用。

还可以使用另一个输出重定向操作符&>)将标准输出和错误输出同时送到同一文件中。例如:

  1. $ ls /usr/tmp 2> err.file  

利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列:

  1. $ ls /usr/bin > /tmp/dir   
  2.  
  3. $ wc –w 

      Linux shell下篇讲解到shell的特殊字符,通过这篇shell上下篇我们进一步了解linux shell,希望对大家有所帮助。

  • linux shell攻略上篇
  • 天外飞仙级别的Linux Shell命令
  • 详细介绍Linux shell脚本基础学习一)
  • linux shell编程if语句内判断参数
  • UNIX和Linux Shell正则表达式语法介绍
  • Linux shell脚本 Linux成功的杀手锏


相关内容