Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 编程 > Shell > 正文

Shell语言十一 管道详解

时间:2014-05-31 00:34 来源:未知 作者:www.51ou.com 阅读:

管道的基本用法为:

COMMAND1 | COMMAND2 | COMMAND3 | ...

COMMAND1 的输出结果会作为输入参数传递给COMMAND2, COMMAND2加以处理后会传递给COMMAND3, 依此类推。管道的使用便是Linux哲学思想中“组合小程序完成复杂任务”的体现方式。

如果管道的最后一个命令是在当前shell的子shell中执行,那么该执行结果不能保存为一个变量,这样会导致当前shell无法获取执行结果,这是由shell中“本地变量只对当前shell的进程有效”的特性决定的。

 

下面来举几个例子演示管道的具体的用法:

例1. 命令 ifconfig可以用来查看当前系统中所有处于活动状态的网络接口,其中包括当前系统所使用的IP地址。通过该IP地址,远程客户端也可以访问当前的系统。

wKiom1NyKIXSdYX6AAkxnGvaewU412.jpg

 

如果想找到远程系统的IP地址(非127.0.0.1——localhost),就可以使用管道:

# ifconfig | grep “inet addr:” | grep -v ‘127.0.0.1’ | cut -d: -f2 | cut -d‘’ -f1

wKiom1NyKinCatfAAAiSj0AeTKU113.jpg

这个例子中一共使用了四次管道,这就是组合小程序完成复杂功能的体现。

 

例2. 如果要取出当前系统上所有用户的shell,要求每种shell只显示一次,并且按使用次数由大到小的顺序进行显示,可以进行以下操作:

# cut -d: f7 /etc/passwd | sort | grep -v “^$” | uniq -c | sort -n

wKiom1NyKniCtmfUAAGbbXiJjTU529.jpg

 

例3. 如果要取出 /etc/inittab文件中的第五行,可以进行以下操作:

# head -5 /etc/inittab | tail -1

wKioL1NyKnujAvTuAAIr2ps4udM173.jpg

 

管道中的值也可以保存为变量。例如要将 /usr/bin中的文件个数以“/usr/bin has N files.”的形式显示出来,就可以使用以下命令:

# FILES=’ls /usr/bin | wc -l’

# echo “/usr/bin has $FILES files.”

wKiom1NyKsjyCOEmAADcW1XmKf8681.jpg

 

 

管道和重定向同时使用(多道输出 tee):

多道输出的格式为:

 

COMMAND1 | tee /Path/To/Somefile

 

首先来看一个例子:

# cat /etc/rc.d/rc.sysinit | less

# cat /etc/rc.d/rc,sysinit > /tmp/pipe.out

# cat /tmp/pipe.out

wKioL1NyKveyVeKgAAJL2ET-kqg784.jpg

由这个例子可以看到,使用了管道就不能使用重定向,反之亦然。如果想在命令中同时使用管道和重定向,那么应该怎么操作呢?

在Linux中有个命令为tee,可以即保存命令到管道中,又实现重定向,比如还是上述例子:

# cat /etc/rc.d/rc.sysinit | tee /tmp/tee.out// 可以看到屏幕上出现了cat的结果

# cat /tmp/tee.out// 同时也能看到/tmp/tee.out中也有结果

wKioL1NyKynwx-glAAG-oVgnhvU448.jpg

由这个例子可以看出,tee命令实际上是一个进口,两个出口,和字母“T”的形状相似。

使用了tee命令,也可以将其结果再次送入管道:

# cat /etc/rc.d/rc.sysinit | tee /tmp/tee.out | less  // cat的内容由tee保存后再进行分页查看

wKiom1NyK3WikVEjAAGDuVvDp40159.jpg

 

再比如要取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users.out文件中:

# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users.out

wKioL1NyK3mSzk1EAAGDuVvDp40539.jpg

 

本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1410773

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《Shell语言十一 管道详解》技术文章,《Shell语言十一 管道详解》详细使用和说明,有时《Shell语言十一 管道详解》可能不完善、敬请谅解!如果《Shell语言十一 管道详解》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(1)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片