前言
类Unix系统中,有非常多的命令,如果每个命令都只能独立运行,无法发挥他们的作用,前辈们利用管道,把命令组合在一起使用,管道也是进程间通信的方式之一
管道符
在shell编程中,管道符用竖线字符(|)表示,利用管道将第一个命令的标准输出作为第二个命令的标准输入,该符号位于键盘上Backspace键的下面,记得要按下Shift键输入,下面请跟我打几个管道符出来
||||||||||||||||||||||||||||||||||卷死你|||||||||||||||||||||||||||||||
举个例子:echo与grep利用管道组合在一起
$ echo baby | grep b
输出结果:
baby
echo命令会将参数原样输出到标准输出中
grep命令可接受标准输入,后面的参数b是指定的正则表达式模式,grep会将匹配的信息写入到标准输出中
上面的代码中,echo命令将标准输出中的内容baby,通过|管道符号传入grep命令中,grep的第一个命令行参数b,指的是正则表达式模式,对于grep命令,由于内容baby中含有b,符合正则表达式,所以我们能看在控制台看到结果baby,这个baby已经是grep命令的标准输出了
baby
再举个例子:连续多个管道的组合
echo baby | grep b | wc -l
输出结果:
1
输出结果是1,俺来给解释一下:
echo命令可以将参数baby,原样输出到标准输出
grep命令则是只输出匹配正则表达式b的标准输出
wc命令则是显示行数
所以你看到的1,代表输出内容有1行
管道可以将多个命令,理论上是不限制数量的,组合在一起使用
前一个命令的标准输出作为下一个命令的标准输入,一直到最后一个命令,结合例子中
echo的标准输出作为grep的标准输入,grep的标准输出又作为wc的标准输入,最后的1,是wc命令的标准输出结果
总结
1、介绍了管道符号的基本使用
2、一个命令能否放在管道后面,取决于它是否接受标准输入,比如grep、wc、awk都可以放到管道的后面,因为能接受标准输入,比如ls、mkdir显示不能放到管道的后面,它们不能接受标准输入
3、 0代表标准输入、1代表标准输出、2代表标准错误,正常情况下键盘是标准输入、屏幕是标准输出与标准错误
4、|这个符号,能将2个,后者多个命令结合在一起,都是bash解释器作的好事,细节先不提了