小鸟初学shell编程管道符(代码片段)

小林coding 小林coding     2022-12-23     420

关键词:

管道作用

管道实际上就是进程之间的一个通信工具,那么用在Linux命令中主要是方便两条命令互相之间可以相互通信。

管道符

管道符(匿名管道)是Shell编程经常用到的通信工具。

管道符是"|",主要是把两个应用程序连接在一起,然后把第一个应用程序的输出,作为第二个应用程序的输入。如果还有第三个应用程序的话,可以把第二个程序的输出,作为第三个应用程序的输入,以此类推。

ls | grep test.sh,在当前文件过滤出test.sh文件:

[root@lincoding /]# ls 
bin   data  etc   lib    lost+found  net   opt   root  selinux  sys    usr
boot  dev   home  lib64  media       mnt   proc  sbin  srv   test.sh   tmp
[root@lincoding /]# ls | grep test.sh 
test.sh

管道符"|"就把ls命令的文件列表输出给到了grep test.sh命令来过滤文件。

管道符与分号符

管道符还有一个需要注意的地方,我们可以通过下面的命令观察到,在使用管道符的时候,管道符会为两条命令产生了子进程。

[root@lincoding /]# cat | ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       2627   2623  0 14:57 pts/0    00:00:00 -bash
root      88029   2627  0 19:51 pts/0    00:00:00 cat
root      88030   2627  0 19:51 pts/0    00:00:00 ps -f

父进程bash的pid为2627,子进程cat的pid为88029,子进程ps -f的pid为88030

由于管道符是会为连接的命令产生子进程,所以也是不会影响当前环境的。

我们用cd /home/ | ls命令验证下,运行结果如下:

[root@lincoding /]# cd /home/ | ls 
bin   data  etc   lib    lost+found  net   opt   root  selinux  sys    usr
boot  dev   home  lib64  media       mnt   proc  sbin  srv   test.sh   tmp   
[root@lincoding /]# pwd
/

从以上的运行结果可以得知,类似切换目录cd这种会影响当前环境的命令,在使用了管道符之后,就没有对当前环境造成影响了。

如果使用分号";"连接两条命令会如何呢?

[root@lincoding /]# cd /sys/ ; ls
block  bus  class  dev  devices  firmware  fs  hypervisor  kernel  module  power
[root@lincoding sys]# pwd
/sys

可以得知,通过分号";"连接,cd命令会对当前环境造成影响。


小结

分号符和管道符都可以连接两条命令,但是其作用是不同的。
分号符实际上就是隔开两条命令,第一条执行完,接着执行完第二条,两条命令之间是没有任何关系的。

管道符的作用是把第一条执行的命令结果传递给第二条命令,同时会为第一条和第二条命令建立子进程,由于命令是在子进程运行的,如果命令有类似cd切换目录这种内建命令,也就不会对当前环境造成影响。所以在使用管道符的时候,要规避使用内建命令。

管道符和作业控制,shell变量,环境变量配置文件(代码片段)

管道符“|”作用:把前面命令的输出结果交给后面的命令作业控制ctrlz暂停一个任务[[email protected]~]#vim1.txt[1]+已停止vim1.txt[[email protected]~]#vim2.txt[2]+已停止vim2.txt[[email protected]~]#jobs[1]-已停止vim1.txt[2]+已停止vim2.txt[ 查看详情

管道符和作业控制,shell变量,环境变量配置文件(代码片段)

管道符和作业控制|把前面命令结果交给后面的命令处理。[[email protected]~]#cat1.txt|wc-l统计行数5[[email protected]~]#cat1.txt|grep‘aaa‘aaaa剪切出aaa的行ctrlz暂停一个任务,这个任务只能在当前终端操作,其它终端可以查到进程jobs... 查看详情

shell管道命令与过滤器(代码片段)

1.管道命令的用法将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。管道使用竖线|连接多个命令,这被称为管道符。Linux管... 查看详情

linuxshell编程:管道和重定向(代码片段)

标准输入输出执行一个shell命令行时通常会自动打开三个标准文件即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中... 查看详情

p1941飞扬的小鸟(代码片段)

...手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。为了简化问题,我们对游戏规则进行了简化和改编... 查看详情

noip2014飞扬的小鸟(代码片段)

...手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。为了简化问题,我们对游戏规则进行了简化和改编... 查看详情

linux学习笔记(二十四)管道符和作业控制shell变量环境变量配置文件(代码片段)

一、管道符和作业控制cat1.txt|wc-l;cat1.txt|grep‘aaa‘将前面命令的结果输入给后面的命令ctrlz暂停一个任务、这时候任务隐藏到后台,通过fg可以重新吊起任务到前台运行jobs查看后台的任务bg[id]把任务调到后台fg[id]把任务调到前台... 查看详情

24shell管道命令与过滤器(代码片段)

1.管道命令的用法2.使用管道命令的好处:3.重定向和管道的区别4.Linux管道实例5.管道与重定向1)管道与输入重定向2)管道与输出重定向6.过滤器7.过滤器举栗1.管道命令的用法将两个或者多个命令(程序或者进程)连接到一起,... 查看详情

使用html5制作的网页游戏-管道小鸟(附源码)(代码片段)

目录1.整体项目框架2.css样式3. 游戏初始化4.游戏结束提示5.效果图​1.整体项目框架2.css样式* padding:0px; margin:0px; #game width:800px; height:600px; background-image:url(img/bg.png); position:relative; overflo 查看详情

linux编程22shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)(代码片段)

1.输出重定向  最基本的重定向是将命令的输出发送到一个文件中。在bashshell中用大于号(>),格式如下:command>inputfile。例如:将date命令的输出内容,保存到指定的输出文件中。      如果文件已存在,重定向操作符... 查看详情

p1941飞扬的小鸟(代码片段)

...维平面,其中有 kk 个管道(忽略管道的宽度)。小鸟始终在游戏界面内移动。小鸟从游戏界面最左边任意整数高度位置出发,到达游戏界面最右边时,游戏完成。小鸟每个单位时间沿横坐标方向右移的距离为 11,竖... 查看详情

c++笔记--linux编程(11)-进程通信(代码片段)

无名管道无名管道        无名管道是半双工的,就是对于一个管道来讲,只能读,或者写。        无名管道只能在相关的、有共同祖先的进程间使用。        一个fork或者exec调用创建的子进程继承了父... 查看详情

shell的介绍以及shell的编程(代码片段)

...是重定向命令置换常见命令ps的状态文件的解压缩tarshell编程变量用户自定义变量位置变量即命令行参数预定义变量环境变量简介命令格式打印环境变量:echo通配符什么是管道‘|’什么是重定向命令置换比如command'command... 查看详情

进程间通信:管道(代码片段)

进程间通信:管道 发表于 2019-02-19 |  阅读次数: 157 |  字数统计: 2,298PipeIPC在Go中的使用与实现。管道(Pipe)多个进程在协作完成同一任务时,通常彼此要传输数据,共享资源。在shell中常常... 查看详情

c语言小游戏:飞翔的小鸟(完整版)(代码片段)

...FlappyBird》是曾经一款流行的一款手机游戏,你只要让小鸟保持飞行,不要碰到绿色的管道就可以啦。操作虽然简单,但是非常具有挑战!本次我们也是自己动手来实现这样一款游戏的高仿版,大家不妨自己先... 查看详情

python管道符(代码片段)

数据不安全,不常用importtimefrommultiprocessingimportPipe,Processdefproducer(prod,cons,name,food):cons.close()foriinrange(10):f=‘%s生产%s%s‘%(name,food,i)prod.send(f)time.sleep(0.5)print(f)prod.close()defconsume 查看详情

shell变量,管道符,作业控制,shell变量,以及变量配置文件

管道符|:管道符是将前面的文件的输出的内容传递给后面的命令[[email protected]~]#ls|wc-l21查看当前目录下有多少文件[[email protected]~]#cat1.txt|wc-l1查看1.txt的行数以上的两个例子就是管道符的简单用法。管道符常营命令cut:截... 查看详情

linux学习之管道符和重定向详解(代码片段)

3、管道符、重定向与环境变量3.1、输入输出重定向标准输入重定向(STDIN,文件描述符为0)默认从键盘输入,还可以从其他文件或命令输入标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕错误输出重定向(STDERR,文件描述符为2)... 查看详情