国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Linux|Centos|Ubuntu|系統(tǒng)進(jìn)程|Fedora|注冊(cè)表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務(wù)器之家 - 服務(wù)器系統(tǒng) - Linux - linux shell 管道命令(pipe)使用及與shell重定向區(qū)別

linux shell 管道命令(pipe)使用及與shell重定向區(qū)別

2020-04-02 19:17Linux教程網(wǎng) Linux

我們看下管道命令了。shell管道,可以說用法就簡(jiǎn)單多了。

管道命令操作符是:”|”,它僅能處理經(jīng)由前面一個(gè)指令傳出的正確輸出信息,也就是 standard output 的信息,對(duì)于 stdandard
error 信息沒有直接處理能力。然后,傳遞給下一個(gè)命令,作為標(biāo)準(zhǔn)的輸入 standard input.
管道命令使用說明:
先看下下面圖:
linux shell 管道命令(pipe)使用及與shell重定向區(qū)別
command1正確輸出,作為command2的輸入 然后comand2的輸出作為,comand3的輸入 ,comand3輸出就會(huì)直接顯示在屏幕上面了。
通過管道之后:comand1,comand2的正確輸出不顯示在屏幕上面
注意:
1、管道命令只處理前一個(gè)命令正確輸出,不處理錯(cuò)誤輸出
2、管道命令右邊命令,必須能夠接收標(biāo)準(zhǔn)輸入流命令才行。
實(shí)例:
 

復(fù)制代碼

代碼如下:


[chengmo@centos5 shell]$ cat test.sh | grep -n 'echo'
5: echo "very good!";
7: echo "good!";
9: echo "pass!";
11: echo "no pass!";
#讀出test.sh文件內(nèi)容,通過管道轉(zhuǎn)發(fā)給grep 作為輸入內(nèi)容
[chengmo@centos5 shell]$ cat test.sh test1.sh | grep -n 'echo'
cat: test1.sh: 沒有那個(gè)文件或目錄
5: echo "very good!";
7: echo "good!";
9: echo "pass!";
11: echo "no pass!";
#cat test1.sh不存在,錯(cuò)誤輸出打印到屏幕,正確輸出通過管道發(fā)送給grep
[chengmo@centos5 shell]$ cat test.sh test1.sh 2>/dev/null | grep -n 'echo'
5: echo "very good!";
7: echo "good!";
9: echo "pass!";
11: echo "no pass!";
#將test1.sh 沒有找到錯(cuò)誤輸出重定向輸出給/dev/null 文件,正確輸出通過管道發(fā)送給grep
[chengmo@centos5 shell]$ cat test.sh | ls
catfile httprequest.txt secure test testfdread.sh testpipe.sh testsh.sh testwhile2.sh
envcron.txt python sh testcase.sh testfor2.sh testselect.sh test.txt text.txt
env.txt release sms testcronenv.sh testfor.sh test.sh testwhile1.sh
#讀取test.sh內(nèi)容,通過管道發(fā)送給ls命令,由于ls 不支持標(biāo)準(zhǔn)輸入,因此數(shù)據(jù)被丟棄


這里實(shí)例就是對(duì)上面2點(diǎn)注意的驗(yàn)證。作用接收標(biāo)準(zhǔn)輸入的命令才可以用作管道右邊。否則傳遞過程中數(shù)據(jù)會(huì)拋棄。 常用來作為接收數(shù)據(jù)管道命令有:sed,awk,cut,head,top,less,more,wc,join,sort,split 等等,都是些文本處理命令。
管道命令與重定向區(qū)別
區(qū)別是:
1、左邊的命令應(yīng)該有標(biāo)準(zhǔn)輸出 | 右邊的命令應(yīng)該接受標(biāo)準(zhǔn)輸入
左邊的命令應(yīng)該有標(biāo)準(zhǔn)輸出 > 右邊只能是文件
左邊的命令應(yīng)該需要標(biāo)準(zhǔn)輸入 < 右邊只能是文件

2、管道觸發(fā)兩個(gè)子進(jìn)程執(zhí)行"|"兩邊的程序;而重定向是在一個(gè)進(jìn)程內(nèi)執(zhí)行
這些都是網(wǎng)上總結(jié)很多的,其實(shí)只要多加清楚用法,也一定有自己的一份不同描述。
實(shí)例:

復(fù)制代碼

代碼如下:


#可以相互轉(zhuǎn)換情況
#輸入重定向
[chengmo@centos5 shell]$ cat test.sh| grep -n 'echo'
5: echo "very good!";
7: echo "good!";
9: echo "pass!";
11: echo "no pass!";
#"|"管道兩邊都必須是shell命令
[chengmo@centos5 shell]$ grep -n 'echo' <test.sh
5: echo "very good!";
7: echo "good!";
9: echo "pass!";
11: echo "no pass!";
#"重定向"符號(hào),右邊只能是文件(普通文件,文件描述符,文件設(shè)備)
[chengmo@centos5 shell]$ mail -s 'test' 8292669@qq.com <test.sh
[chengmo@centos5 shell]$ cat test.sh|mail -s 'test' 8292669@qq.com
#以上2個(gè)也相同,將test.sh內(nèi)容發(fā)送到指定郵箱。
[chengmo@centos5 shell]$ (sed -n '1,$p'|grep -n 'echo')<test.sh
5: echo "very good!";
7: echo "good!";
9: echo "pass!";
11: echo "no pass!";
#這個(gè)腳本比較有意思了。由于前面是管道,后面需要把test.sh內(nèi)容重定向到 sed ,然后sed輸出通過管道,輸入給grep.需要將前面用"()"運(yùn)算符括起來。在單括號(hào)內(nèi)的命令,可以把它們看作一個(gè)象一個(gè)命令樣。如果不加括號(hào)test.sh就是grep 的輸入了。
#上面一個(gè)等同于這個(gè)
[chengmo@centos5 shell]$ sed -n '1,$p'<test.sh | grep -n 'echo'
5: echo "very good!";
7: echo "good!";
9: echo "pass!";
11: echo "no pass!";
#重定向運(yùn)算符,在shell命令解析前,首先檢查的(一個(gè)命令,執(zhí)行前一定檢查好它的輸入,輸出,也就是0,1,2 設(shè)備是否準(zhǔn)備好),所以優(yōu)先級(jí)會(huì)最高
[chengmo@centos5 shell]$ sed -n '1,10p'<test.sh | grep -n 'echo' <testsh.sh
10:echo $total;
18:echo $total;
21: echo "ok";
#哈哈,這個(gè)grep又接受管道輸入,又有testsh.sh輸入,那是不是2個(gè)都接收呢。剛才說了"<"運(yùn)算符會(huì)優(yōu)先,管道還沒有發(fā)送數(shù)據(jù)前,grep綁定了testsh.sh輸入,這樣sed命令輸出就被拋棄了。這里一定要小心使用
#輸出重定向
[chengmo@centos5 shell]$ cat test.sh>test.txt
[chengmo@centos5 shell] cat test.sh|tee test.txt &>/dev/null
#通過管道實(shí)現(xiàn)將結(jié)果存入文件,還需要借助命令tee,它會(huì)把管道過來標(biāo)準(zhǔn)輸入寫入文件test.txt ,然后將標(biāo)準(zhǔn)輸入復(fù)制到標(biāo)準(zhǔn)輸出(stdout),所以重定向到/dev/null 不顯示輸出
#">"輸出重定向,往往在命令最右邊,接收左邊命令的,輸出結(jié)果,重定向到指定文件。也可以用到命令中間。
[chengmo@centos5 shell]$ ls test.sh test1.sh testsh.sh 2>err.txt | grep 'test'
test.sh
testsh.sh
#目錄下面有:test,testsh文件,test1.sh不存在,因此將ls 命令錯(cuò)誤輸出輸入到err.txt 正確輸出,還會(huì)通過管道發(fā)送到grep命令。
[chengmo@centos5 shell]$ ls test.sh test1.sh testsh.sh &>err.txt | grep 'test'
#這次打印結(jié)果是空,&代表正確與錯(cuò)誤輸出 都輸入給err.txt,通過管道繼續(xù)往下面?zhèn)鬟f數(shù)據(jù)為空,所以沒有什么顯示的
#同樣">"輸出重定向符,優(yōu)先級(jí)也是先解析,當(dāng)一個(gè)命令有這個(gè)字符,它就會(huì)與左邊命令標(biāo)準(zhǔn)輸出綁定。準(zhǔn)備好了這些,就等待命令執(zhí)行輸出數(shù)據(jù),它就開始接收


再概括下:
從上面例子可以看,重定向與管道在使用時(shí)候很多時(shí)候可以通用,其實(shí),在shell里面,經(jīng)常是【條條大路通羅馬】的。一般如果是命令間傳遞參數(shù),還是管道的好,如果處理輸出結(jié)果需要重定向到文件,還是用重定向輸出比較好。
命令執(zhí)行順序可以看下:Linux Shell 通配符、元字符、轉(zhuǎn)義符使用實(shí)例介紹

shell腳本接收管道輸入
有意思的問題:

既然作用管道接收命令,需要可以接收標(biāo)準(zhǔn)的輸入,那么我們shell腳本是否可以開發(fā)出這樣的基本程序呢?(大家經(jīng)常看到的,都是一些系統(tǒng)的命令作為管道接收方)

實(shí)例(testpipe.sh):

復(fù)制代碼

代碼如下:


#!/bin/sh
if [ $# -gt 0 ];then
exec 0<$1;
#判斷是否傳入?yún)?shù):文件名,如果傳入,將該文件綁定到標(biāo)準(zhǔn)輸入
fi
while read line
do
echo $line;
done<&0;
#通過標(biāo)準(zhǔn)輸入循環(huán)讀取內(nèi)容
exec 0&-;
#解除標(biāo)準(zhǔn)輸入綁定


運(yùn)行結(jié)果:
 

復(fù)制代碼

代碼如下:


[chengmo@centos5 shell]$ cat testpipe.txt
1,t,est pipe
2,t,est pipe
3,t,est pipe
4,t,est pipe
#testpipe.txt 只是需要讀取的測(cè)試文本
[chengmo@centos5 shell]$ cat testpipe.txt | sh testpipe.sh
1,t,est pipe
2,t,est pipe
3,t,est pipe
4,t,est pipe
#通過cat 讀取 testpipe.txt 發(fā)送給testpipe.sh 標(biāo)準(zhǔn)輸入
[chengmo@centos5 shell]$ sh testpipe.sh testpipe.txt
1,t,est pipe
2,t,est pipe
3,t,est pipe
4,t,est pipe
#testpipe.sh 通過出入文件名讀取文件內(nèi)容

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 午夜精品视频在线观看 | 亚洲免费观看在线视频 | 美女一级毛片 | 精品少妇一区二区三区在线播放 | 一级黄色免费毛片 | 色8888www视频在线观看 | 狠狠色狠狠色合久久伊人 | 日本中文字幕在线播放 | 亚洲 欧美 另类 综合 偷拍 | 成人在线免费观看小视频 | 91精品久久久久久久91蜜桃 | 91在线免费看 | 欧美人成在线视频 | 中文字幕免费在线 | 国产精品成人观看视频国产奇米 | 久久精品无码一区二区三区 | 男女全黄一级一级高潮免费看 | 一级黄色大片免费观看 | 欧美精品欧美精品系列 | 国产一区二区三区免费看 | 亚洲精品一区中文字幕乱码 | 精品99在线 | 久久综合九色综合网站 | 国产精品久久九九 | 亚洲 欧美 另类 综合 偷拍 | 欧美一区二区三区成人 | 国产成人精品一区二区三区 | 中文字幕av在线播放 | 免费成人在线视频观看 | 亚洲一区中文字幕 | 久久久国产一区二区三区 | 成人精品视频在线观看 | 欧美一级免费看 | 久久精品国产一区二区三区不卡 | 日本末发育嫩小xxxx | 欧美成人黄色网 | 中文字幕av第一页 | 久草青青草| 小情侣高清国产在线播放 | 台湾一级特黄aa大片免费看 | 日韩中文字幕在线观看 |