Shell Programming

Linux下的Shell编程主要包括以下类别:

Shell 名称 Shell来源
sh(Bourne) 早期UNIX最初的Shell版本
csh, tcsh, zsh C shell和它的衍生工具,由Berkeley UNIX的 Bill Joy 发明。C shell在shell流行排行榜上位列第三,仅次于bash和Korn shell。
ksh, pdksh Korn shell由 David Korn 编写,这是大多数商业版UNIX的默认shell。
bash 来自GNU工程。 是Bourne Again SHell的缩写。优点是源代码公开,移植性好。能够在绝大部分Linux和UNIX上运行。

 

管道和重定向(Pipes and Redirection)

在详细介绍shell编程之前,最好对Linux程序(并非仅限于shell)输入输出的重定向机制有个了解。

 

输出重定向(Redirecting Outputs)

你可能对重定向比较熟悉了,比如

 

        $ ls -l > lsoutput.txt

 

把ls的输出存储到lsoutput.txt文件中。

 

重定向的功能十分强大,以后会详细讲解。现在,我们需要知道文件描述符0(file descriptor)是程序的标准输入,文件描述符1是程序的标准输出,文件描述符2是错误的标准输出。这些都可以重定向。

 

上面例子中,我们将标准输出重定向到lsoutput.txt中。默认情况下,如果lsoutput.txt文件存在,原来内容将被新内容覆盖。如果你想改变默认的动作,你可以设置-C选项,这样就可以放置文件被覆盖。

 

如果想要将内容添加到文件末尾,我们可以使用>>操作符,比如:

 

        $ ps >> lsoutput.txt

 

会将ps的输出添加到lsoutput.txt的末尾。

 

为了将标准错误重定向,可以使用2>,这样就可以防止错误信息出现在屏幕上。

 

比如你想在脚本文件中用kill命令杀死一个进程。有些时候,在kill执行命令之前,进程已经挂掉,这样的话,kill命令就向标准输出写出错误,默认情况下,错误信息会出现在屏幕上。将标准输出和标准错误输出重定向,就可以避免kill命令向屏幕输出信息。命令如下:

 

        $ kill -HUP 1234 >killout.txt 2>killer.txt

 

会将输出和错误信息分别放到不同的文件中。如果想将两者放到同一文件中,可以这样:

 

        $ kill -HUP 1234 >killout.txt 2>&1

 

输入重定向(Redirecting Input)

跟输出重定向一样,我们也可以输入重定向:

 

        $ more < killout.txt

 

管道(Pipes)

在Linux我们可以用管道符号|将进程联系起来。下面是一个简单的例子。

 

假如不用管道,程序可能要这样编写:

 

        $ ps > psout.txt

        $ sort psout.txt > pssort.txt

 

如果用管道,可以这样写:

 

        $ ps | sort > pssort.txt

 

如果我们只是想要看看当前的进程数,我们只需如下即可:

 

        $ ps | sort | more

你可能感兴趣的:(linux,unix,shell,kill,Descriptor)