shell 程序设计,管道和重定向

shell编程的缺点:1.移植性差 2.效率低。优点:简单,方便。他非常用来适合让我们完成一些自动的,重复性的,但要求效率不高,移植性不强的任务。比如每周定时对你的linux系统垃圾的清理任务就可以交给SHELL来完成。

 

谈到shell首先必然想到的是2个重要的东西,输入输出重定向和管道。

 

输入输出重定向:程序都有输入和输出(2者都没有,这个程序就没什么太大的意义),一般来说我们输入输出的目的地都是文件,有人提出疑问,我们最常用的输出如显示器就是个外部设备,不是一个文件。linux对文件的定义是:能够产生和销毁信息的东西。显示器能销毁信息,所以它是一个文件。我们常说0号是标准输入,1号是标准输出,2号是标准错误输出。其真正意义是在linux的内核中体现的,没一个进程都会有一个自己的文件列表,这是一个数组,这个数组中没一个元素代表一个文件,其中0,1,2这3个元素就是我们前面所说的对应的3个文件。重定向就是把信息重定向到另一个文件,所以>后面应该接的是linux意义上的文件。kill 100000 > out.txt 2>wrong.txt这个语句意思就是把这个命令执行后,首先把标准输出放到out.txt,然后错误输出放到 wrong.txt。

 

管道:底层实现在我linux里面谈到过是 pipe函数,在shell中是|符号,他意思是把前一个指令的输出参数作为后一个指令的输入参数,这些在 shell 编程中都是非常好用的东西。比如你想在屏幕上显示一个目录下所有文件,但这个目录下的文件非常多,你希望分页显示,那么你可以使用 ls -al | more质量。这里有个关键,more不是在ls -al执行完后再开始执行的,这2个进程是同时开始运行的。但我曾经在pipe函数里面介绍过,pipe会自动协调管道2端进程对管道资源的互斥共享,所以不要以为more是在 ls后开始运行,这种想法会导致你的一些错误。

 

你可能感兴趣的:(编程,linux)