日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
LinuxShell管道通信:高效實(shí)現(xiàn)進(jìn)程間通信(linuxshell管道通信)

在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,多進(jìn)程運(yùn)行很常見(jiàn)。進(jìn)程間通信是保證多進(jìn)程協(xié)作的重要手段。在Linux系統(tǒng)上,進(jìn)程間通信的方式有很多,其中shell管道通信是一種簡(jiǎn)單高效的方式。

創(chuàng)新互聯(lián)公司是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作與策劃設(shè)計(jì),梅縣網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:梅縣等地區(qū)。梅縣做網(wǎng)站價(jià)格咨詢(xún):13518219792

Shell管道通信是指在shell環(huán)境下通過(guò)管道符將一個(gè)進(jìn)程的輸出連接到另一個(gè)進(jìn)程的輸入的方法。在這種方式下,進(jìn)程A將輸出傳遞給進(jìn)程B,這樣就可以實(shí)現(xiàn)進(jìn)程間通信,并達(dá)到進(jìn)程協(xié)作的目的。下面通過(guò)幾個(gè)具體的例子來(lái)詳細(xì)介紹shell管道通信在Linux系統(tǒng)上如何高效實(shí)現(xiàn)進(jìn)程間通信。

一、通過(guò)管道實(shí)現(xiàn)進(jìn)程間通信

假如我們有兩個(gè)進(jìn)程,分別是進(jìn)程A和進(jìn)程B,需要進(jìn)行數(shù)據(jù)的傳遞。進(jìn)程A需要將數(shù)據(jù)輸出,進(jìn)程B需要將輸入連接到進(jìn)程A的輸出。通過(guò)管道符可以很方便地實(shí)現(xiàn)進(jìn)程間通信。具體實(shí)現(xiàn)步驟如下:

1.進(jìn)程A向管道輸出數(shù)據(jù),例如:

“`

echo “data to be sent” | pipe

“`

這里,`data to be sent`是進(jìn)程A輸出的數(shù)據(jù),`pipe`是管道符號(hào),表示這個(gè)進(jìn)程需要將數(shù)據(jù)傳遞給下一個(gè)進(jìn)程。

2.進(jìn)程B將管道當(dāng)作輸入依賴(lài),例如:

“`

pipe | process B

“`

這里,管道符前面的`pipe`表示數(shù)據(jù)來(lái)源,管道符后面的`process B`表示數(shù)據(jù)目的地。

通過(guò)上述兩個(gè)例子我們可以看到,使用shell管道實(shí)現(xiàn)進(jìn)程間通信非常容易。其中,除了管道符號(hào)外,無(wú)需進(jìn)行其他操作。

二、通過(guò)管道批量傳輸數(shù)據(jù)

在上面的例子中,我們只演示了單個(gè)數(shù)據(jù)的傳輸,但對(duì)于大量數(shù)據(jù)傳輸時(shí),單個(gè)數(shù)據(jù)的傳輸效率是不高的。因此,我們需要通過(guò)一定方式批量傳輸數(shù)據(jù),提高傳輸效率。下面的例子中演示了如何使用管道批量傳輸數(shù)據(jù)。

1.進(jìn)程A輸出大量數(shù)據(jù),例如:

“`

more data.txt | pipe

“`

其中,`data.txt`是需要傳輸?shù)奈募?/p>

2.進(jìn)程B讀取并處理管道數(shù)據(jù),例如:

“`

pipe | process B

“`

在這個(gè)例子中,進(jìn)程A通過(guò)more命令將需要傳輸?shù)臄?shù)據(jù)輸出到管道中,進(jìn)程B通過(guò)管道符號(hào)接收數(shù)據(jù),并進(jìn)行處理。這種方式可以有效的批量傳輸數(shù)據(jù),提高數(shù)據(jù)傳輸?shù)男省?/p>

三、通過(guò)同時(shí)執(zhí)行多個(gè)進(jìn)程實(shí)現(xiàn)并行處理

在一些場(chǎng)景下,我們需要同時(shí)執(zhí)行多個(gè)進(jìn)程,每個(gè)進(jìn)程接收來(lái)自其他進(jìn)程的數(shù)據(jù)并進(jìn)行數(shù)據(jù)處理,這種方式可以實(shí)現(xiàn)數(shù)據(jù)處理的并行處理,提高整個(gè)系統(tǒng)的執(zhí)行效率。下面通過(guò)一個(gè)實(shí)例來(lái)詳細(xì)說(shuō)明這個(gè)過(guò)程。

1.定義若干個(gè)進(jìn)程:

“`

process A | pipe1

process B | pipe2

process C | pipe3

process D | pipe4

“`

在這個(gè)實(shí)例中,我們定義了四個(gè)進(jìn)程A、B、C和D,每個(gè)進(jìn)程產(chǎn)生的數(shù)據(jù)都通過(guò)一個(gè)獨(dú)立的管道(pipe)進(jìn)行傳輸,管道的名稱(chēng)分別是pipe1、pipe2、pipe3和pipe4。

2.將所有管道匯聚起來(lái):

“`

cat pipe1 pipe2 pipe3 pipe4 | process E

“`

在這個(gè)步驟中,我們將四個(gè)管道中的數(shù)據(jù)合并在一起,然后傳輸給另一個(gè)進(jìn)程E進(jìn)行處理。

通過(guò)上述實(shí)例,我們可以看到,使用shell管道實(shí)現(xiàn)進(jìn)程間通信可以同時(shí)執(zhí)行多個(gè)進(jìn)程并進(jìn)行并行處理,大大提高了整個(gè)處理系統(tǒng)的效率。

四、使用Shell腳本實(shí)現(xiàn)數(shù)據(jù)傳輸

Shell腳本是Linux系統(tǒng)下主要的腳本語(yǔ)言之一,可以用于自動(dòng)化操作、快速處理數(shù)據(jù)等。在數(shù)據(jù)傳輸?shù)膱?chǎng)景中,使用腳本可以自動(dòng)化實(shí)現(xiàn)數(shù)據(jù)的輸入輸出,方便快捷。

下面通過(guò)實(shí)例演示如何使用Shell腳本實(shí)現(xiàn)數(shù)據(jù)傳輸。

1.編寫(xiě)腳本:

“`

#!/bin/bash

# A腳本

for i in {1..10}

do

echo “$i”

done | pipe

“`

其中,`A.sh`腳本包含了一個(gè)循環(huán),逐個(gè)輸出1到10之間的數(shù)字,并將每個(gè)數(shù)字通過(guò)pipe符輸出到管道中。

“`

#!/bin/bash

# B腳本

pipe | while read data

do

echo “Processing data $data …”

done

“`

在這個(gè)腳本中,我們使用while循環(huán)接收管道數(shù)據(jù),并對(duì)每個(gè)數(shù)據(jù)進(jìn)行處理。這個(gè)腳本可以作為進(jìn)程B在進(jìn)程A運(yùn)行時(shí),接收管道數(shù)據(jù)并進(jìn)行處理。通過(guò)上述Shell腳本的編寫(xiě),我們可以實(shí)現(xiàn)自動(dòng)化的數(shù)據(jù)傳輸,大大提高數(shù)據(jù)處理的效率。

通過(guò)shell管道通信可以實(shí)現(xiàn)Linux進(jìn)程間通信的高效實(shí)現(xiàn)。使用這種方式,我們可以方便、快捷地實(shí)現(xiàn)進(jìn)程數(shù)據(jù)的傳輸和并行處理,提高整個(gè)系統(tǒng)的處理效率。如果你還沒(méi)有接觸過(guò)shell管道通信方式,不妨在Linux系統(tǒng)中開(kāi)啟一個(gè)終端窗口,嘗試一下上述例子,掌握這種數(shù)據(jù)傳輸方式的實(shí)現(xiàn)方法。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專(zhuān)注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線(xiàn):028-86922220

學(xué)生信的那些事兒之七 – Linux基礎(chǔ)之Shell腳本編程

沿著前面的軌跡,接下來(lái)是Linux中shell腳本的學(xué)習(xí)。這對(duì)于生信工程師后續(xù)處理大量 (海量更合適些) 數(shù)據(jù)是非常非常脊碼重要的,但是同樣的,作為一個(gè)有點(diǎn)古板的人,對(duì)于”腳本”是什么意思我都死磕了好久。主要覺(jué)得有些抽象,尤其是跟生信的同事討論項(xiàng)目分析部分的問(wèn)題時(shí),他們經(jīng)常會(huì)說(shuō)道這個(gè)詞,在他們意識(shí)里這是個(gè)不言自明的術(shù)語(yǔ),殊不知對(duì)外行人而言 (比如我),那簡(jiǎn)直就是無(wú)情的”知識(shí)的詛咒”。經(jīng)常是我假裝聽(tīng)懂了,然后繼續(xù)討論下面的問(wèn)題,形成一個(gè)模糊的印象。

百度上的解釋是:腳本(Script)是一種批處理文件的延伸,是一種純文本保存的程序,一般來(lái)說(shuō)的計(jì)算機(jī)腳本程序是確定的一系列控制計(jì)算機(jī)進(jìn)行運(yùn)算操作動(dòng)作的組合,在其中可以實(shí)現(xiàn)一定的邏輯分支等。不知道你能不能看懂,反正我開(kāi)始的時(shí)候真是一知半解。

鳥(niǎo)哥私房菜的解釋是:shell script是利用 shell 的功能所寫(xiě)的一個(gè)”程序”,這個(gè)程序是使用純文本文件,將一些shell的語(yǔ)法與命令(含外部命令)寫(xiě)在里面,搭配正則表達(dá)式、管道命令與數(shù)據(jù)流重定向等功能,以達(dá)到我們所想要的處理的目的。不明覺(jué)厲,好像更看不懂了···

Jude 的簡(jiǎn)單粗暴大白話(huà)解釋是:腳本就是Linux中很多命令按照一定規(guī)則的組合,以實(shí)現(xiàn)某個(gè)特定的功能。Linux中有很多簡(jiǎn)單的命令,往往只是進(jìn)行了簡(jiǎn)單的對(duì)話(huà),比如 cd 就是進(jìn)入到某個(gè)目錄,簡(jiǎn)單直接。但是如果我想進(jìn)入某個(gè)目錄A,然后在目錄A中創(chuàng)建目錄B,再在目錄B中創(chuàng)建文本C呢?當(dāng)然可以一步一步操作,如果想要一步到位呢,那就可以用腳本,把三個(gè)命令寫(xiě)在一起,一起執(zhí)行。好像有點(diǎn)啰嗦···

或者從英語(yǔ)的角度去理解,腳本的對(duì)應(yīng)英文是Script,而這個(gè)單詞的中文釋義中還有劇本的意思。劇本就好理解了啊,劇本就是導(dǎo)演(生信工程師)基于某個(gè)主旨(要實(shí)現(xiàn)的目標(biāo))按照一定的手法(規(guī)則)所寫(xiě)的一個(gè)故事。不管是哪個(gè)演員,都得按照劇本演。所以,學(xué)好英語(yǔ)對(duì)于生信也是有幫助的~

按照腳本的復(fù)雜程度可以分為:

這個(gè)無(wú)需多說(shuō),其實(shí)就是若干個(gè)簡(jiǎn)單命令的順序排列,執(zhí)行腳本后會(huì)按照命令的前后關(guān)系從前往后一一執(zhí)行。

相對(duì)于簡(jiǎn)單的基本腳本,結(jié)構(gòu)化的命令腳本可以施加邏輯流程控制,從而改變程序(命令)執(zhí)行的順序。基本腳本中的命令就是從上往下執(zhí)行,但兄野迅是結(jié)構(gòu)化的命令腳本可以根據(jù)邏輯判斷重復(fù)或者跳過(guò)某些命令。

常用的結(jié)構(gòu)化命令(語(yǔ)句)有:

后面還有什么嵌套循環(huán)啊啥的,不過(guò)我覺(jué)得上面的7中命令學(xué)到家了,應(yīng)該可以應(yīng)付大部分在生信分析里面的應(yīng)用了。

記得高中的時(shí)候,物理老師(也是班主任)在給我們講解習(xí)題時(shí)有個(gè)有意思的套路:不管什么難題現(xiàn)在下面寫(xiě)個(gè)”答:”,以示自己解決問(wèn)題的決心,也是一種正向的心理暗示。腳本編寫(xiě)也是有套路的,不過(guò)總的來(lái)說(shuō)還是比較簡(jiǎn)單。

對(duì)于簡(jiǎn)單的腳本(超級(jí)簡(jiǎn)單的那種),直接幾個(gè)命令連在一起即可,中間用”;”隔開(kāi)。

對(duì)于更長(zhǎng)更復(fù)雜的腳本,一般需要?jiǎng)?chuàng)建一個(gè)文本,并在里面編輯。這就涉及到了文本編輯器,比較常用和簡(jiǎn)單的一般有nano和vim,實(shí)在羨此很簡(jiǎn)單,規(guī)則也容易理解,教程隨手可得,不多說(shuō)。

比如用vim創(chuàng)建了一個(gè)腳本之后,具體的語(yǔ)法(套路):

ok,腳本寫(xiě)完了,怎么讓腳本開(kāi)始工作呢?這有涉及到之前講過(guò)的環(huán)境變量和相對(duì)路徑、絕對(duì)路徑了。方法有三:

就這么多吧,應(yīng)該有點(diǎn)感覺(jué)到了,剩下的就是狂練狂練了~

如何使用Linux shell編程來(lái)進(jìn)行系統(tǒng)管理和網(wǎng)絡(luò)管理

從程序員的角度來(lái)看, Shell本身是一種用C語(yǔ)言編寫(xiě)的程序,從用戶(hù)的角度來(lái)看,Shell是用戶(hù)與Linux操作系統(tǒng)溝通的橋梁。用戶(hù)既可以輸入命令執(zhí)行,又可以利用 Shell腳本編程,完成更加復(fù)雜的操作。在Linux GUI日益完善的今天,在系統(tǒng)管理等領(lǐng)域,Shell編程仍然起著不可忽視的作用。深入地了解和熟練地掌握Shell編程,是每一個(gè)Linux用戶(hù)的必修 功課之一。

Linux的Shell種類(lèi)眾多,常見(jiàn)的有:Bourne Shell(/usr/bin/sh或/bin/弊明sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/in/sh),等等。不同的Shell語(yǔ)言的語(yǔ)法有所不同,所以不能交換使用。卜皮每種Shell都有其特色之處,基本上,掌握其中任何一種 就足夠了。在本文中,我們關(guān)注的重點(diǎn)是Bash,也就是Bourne Again Shell,由于易用和免費(fèi),Bash在日常工作中被廣泛使用;同時(shí),Bash也是大多數(shù)Linux系統(tǒng)默認(rèn)的Shell。在一般情況下,人們并不區(qū)分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我們可以看到#!/bin/sh,它同樣也可以改為#!/bin/bash。

利用vi等文本編輯器編寫(xiě)Shell腳本的格式是固定的,如下:

#!/bin/sh

#comments

Your commands go here

首行中的符號(hào)#!告訴系統(tǒng)其后路徑所指定的程序即是解釋此腳本文件的Shell程 序。如果首行沒(méi)有這句話(huà),在執(zhí)行腳本文件的時(shí)候,將會(huì)出現(xiàn)錯(cuò)誤。后續(xù)的部分就是主程序,Shell腳本像高級(jí)語(yǔ)言一樣,也有變量賦值,也有控制語(yǔ)句。除第 一行外,以#開(kāi)頭的行就是注釋行,直到此行的結(jié)束。如果一行未完成,可以在行尾加上”,這個(gè)符號(hào)表明下一行與此行會(huì)合并為同一行。

編輯完畢,將腳本存盤(pán)為filename.sh,文件名后綴sh表明這是一個(gè)Bash腳本文件。執(zhí)行腳本的時(shí)候,要先將腳本文件的屬性改為可執(zhí)行的:

chmod +x filename.sh

執(zhí)行腳本的方法是:

./filename.sh

下面我們從經(jīng)典的“hello world”入手,看一看最簡(jiǎn)單的Shell腳本的模樣。

#!/bin/sh

#print hello world in the console window

a = “hello world”

echo $a

Shell Script是一種弱類(lèi)型語(yǔ)言,使用變量的時(shí)候無(wú)需首先聲明其類(lèi)型。新的變量會(huì)在本地?cái)?shù)據(jù)區(qū)分配內(nèi)存進(jìn)行存儲(chǔ),這個(gè)變量歸當(dāng)前的Shell所有,任何子進(jìn) 程都不能訪(fǎng)問(wèn)本地變量。這些變量與環(huán)境變量不同,環(huán)境變量被存儲(chǔ)在另一內(nèi)存區(qū),叫做用戶(hù)環(huán)境區(qū),這塊內(nèi)存中的變量可以被子進(jìn)程訪(fǎng)問(wèn)。變量賦值的方式是:

variable_name = variable_value

如果對(duì)一個(gè)已經(jīng)有值的變量賦值,新值將取代舊值。取值的時(shí)候要在變量名前加$,$variable_name可以在引號(hào)中使用,這一點(diǎn)和其他高級(jí)語(yǔ)言是明顯不同的。如果出現(xiàn)混淆租弊告的情況,可以使用花括號(hào)來(lái)區(qū)分,例如:

echo “Hi, $as”

就不會(huì)輸出“Hi, hello worlds”,而是輸出“Hi,”。這是因?yàn)镾hell把$as當(dāng)成一個(gè)變量,而$as未被賦值,其值為空。正確的方法是:

echo “Hi, ${a}s”

單引號(hào)中的變量不會(huì)進(jìn)行變量替換操作。

關(guān)于變量,還需要知道幾個(gè)與其相關(guān)的Linux命令。

env用于顯示用戶(hù)環(huán)境區(qū)中的變量及其取值;set用于顯示本地?cái)?shù)據(jù)區(qū)和用戶(hù)環(huán)境區(qū)中的變量及其取值;unset用于刪除指定變量當(dāng)前的取值,該值將被指定為NULL;export命令用于將本地?cái)?shù)據(jù)區(qū)中的變量轉(zhuǎn)移到用戶(hù)環(huán)境區(qū)。

下面我們來(lái)看一個(gè)更復(fù)雜的例子,結(jié)合這個(gè)例子,我們來(lái)講述Shell Script的語(yǔ)法。

1 #!/bin/bash

2 # we have less than 3 arguments. Print the help text:

3 if ; then

4 cat

ren — renames a number of files using sed regular expressions

6

USAGE: ren ‘regexp’ ‘replacement’ files

EXAMPLE: rename all *.HTM files in *.html:

ren ‘HTM$’ ‘html’ *.HTM

10

11 HELP

exit 0

13 fi

14 OLD=”$1″

15 NEW=”$2″

16 # The shift command removes one argument from the list of

17 # command line arguments.

18 shift

19 shift

20 # $* contains now all the files:

21 for file in $*; do

22 if ; then

newfile=`echo “$file” | sed “s/${OLD}/${NEW}/g”`

if ; then

echo “ERROR: $newfile exists already”

else

echo “renaming $file to $newfile “

mv “$file” “$newfile”

fi

30 fi

31 done

我們從頭來(lái)看,前面兩行上一個(gè)例子中已經(jīng)解釋過(guò)了,從第三行開(kāi)始,有新的內(nèi)容。if語(yǔ)句和其他編程語(yǔ)言相似,都是流程控制語(yǔ)句。它的語(yǔ)法是:

if …; then

elif …; then

else

fi

與其他語(yǔ)言不同,Shell Script中if語(yǔ)句的條件部分要以分號(hào)來(lái)分隔。第三行中的表示條件測(cè)試,常用的條件測(cè)試有下面幾種:

判斷$file是否是一個(gè)文件

判斷$a的值是否小于3,同樣-gt和-le分別表示大于或小于等于

判斷$file是否存在且有可執(zhí)行權(quán)限,同樣-r測(cè)試文件可讀性

判斷變量$a是否有值,測(cè)試空串用-z

判斷$a和$b的取值是否相等

判斷cond1和cond2是否同時(shí)成立,-o表示cond1和cond2有一成立

要注意條件測(cè)試部分中的空格。在方括號(hào)的兩側(cè)都有空格,在-f、-lt、=等符號(hào)兩側(cè)同樣也有空格。如果沒(méi)有這些空格,Shell解釋腳本的時(shí)候就會(huì)出錯(cuò)。

$#表示包括$0在內(nèi)的命令行參數(shù)的個(gè)數(shù)。在Shell中,腳本名稱(chēng)本身是$0,剩下的依次是$0、$1、$2…、${10}、${11},等等。$*表示整個(gè)參數(shù)列表,不包括$0,也就是說(shuō)不包括文件名的參數(shù)列表。

現(xiàn)在我們明白第三行的含義是如果腳本文件的參數(shù)少于三個(gè),則執(zhí)行if和fi語(yǔ)句之間 的內(nèi)容。然后,從第四行到第十一行之間的內(nèi)容在Shell Script編程中被稱(chēng)為Here文檔,Here文檔用于將多行文本傳遞給某一命令。Here文檔的格式是以

第十二行的exit是Linux的命令,表示退出當(dāng)前進(jìn)程。在Shell腳本中可以使用所有的Linux命令,利用上面的cat和exit,從一方面來(lái)說(shuō),熟練使用Linux命令也可以大大減少Shell腳本的長(zhǎng)度。

十四、十五兩句是賦值語(yǔ)句,分別將之一和第二參數(shù)賦值給變量OLD和NEW。緊接下來(lái)的兩句是注釋?zhuān)⑨屜旅娴膬蓷lshift的作用是將參數(shù)列表中的之一個(gè)和第二個(gè)參數(shù)刪除,后面的參數(shù)依次變?yōu)樾碌闹缓偷诙?shù),注意參數(shù)列表原本也不包括$0。

然后,自二十一行到三十一行是一個(gè)循環(huán)語(yǔ)句。Shell Script中的循環(huán)有下面幾種格式:

while && { || } …; do

done

for var in …; do

done

for (( cond1; cond2; cond3 )) do

done

until && { || } …; do

done

在上面這些循環(huán)中,也可以使用類(lèi)似C語(yǔ)言中的break和continue語(yǔ)句中斷 當(dāng)前的循環(huán)操作。第二十一行的循環(huán)是將參數(shù)列表中的參數(shù)一個(gè)一個(gè)地放入變量file中。然后進(jìn)入循環(huán),判斷file是否為一個(gè)文件,如果是文件的話(huà),則用 sed命令搜索和生成新的文件名。sed基本上可以看成一個(gè)查找替換程序,從標(biāo)準(zhǔn)輸入,例如管道讀入文本,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出,sed使用正則表達(dá)式 進(jìn)行搜索。在第二十三行中,backtick(`)的作用是取出兩個(gè)backtick之間的命令輸出結(jié)果,在這里,也就是將結(jié)果取出賦給變量 newfile。此后,判斷newfile是否已經(jīng)存在,否則就把file改成newfile。這樣我們就明白這個(gè)腳本的作用了,Shell Script編寫(xiě)的其他腳本與此相似,只不過(guò)是語(yǔ)法和用法稍有不同而已。

通過(guò)這個(gè)例子我們明白了Shell Script的編寫(xiě)規(guī)則,但還有幾件事情需要講述一下。

之一個(gè),除了if語(yǔ)句之外,Shell Script中也有類(lèi)似C語(yǔ)言中多分支結(jié)構(gòu)的case語(yǔ)句,它的語(yǔ)法是:

case var in

pattern 1 )

… ;;

pattern 2 )

… ;;

*)

… ;;

esac

我們?cè)倬拖旅嬉粋€(gè)例子,看看case語(yǔ)句的用法。

while getopts vc: OPTION

do

case $OPTION in

c) COPIES=$OPTARG

ehco “$COPIES”;;

v) echo “suyang”;;

\?) exit 1;;

esac

done

上面的getopts類(lèi)似于C語(yǔ)言提供的函數(shù)getopts,在Shell Script中,getopts經(jīng)常和while語(yǔ)句聯(lián)合起來(lái)使用。getopts的語(yǔ)法如下:

getopts option_string variable

option_string中包含一串單字符選項(xiàng),若getopts在命令行參數(shù)中 發(fā)現(xiàn)了連字符,那么它會(huì)將連字符之后的字符與option_string進(jìn)行比較,若匹配成功,則把變量variable的值設(shè)為該選項(xiàng),若無(wú)匹配,則把 變量的值設(shè)為?。有時(shí)候,選項(xiàng)還會(huì)帶一個(gè)值,例如-c5等,這時(shí)要在option_string中該選項(xiàng)字母后面加上一個(gè)冒號(hào),getopts發(fā)現(xiàn)冒號(hào) 后,會(huì)讀取該值,然后將該值放入特殊變量OPTARG中。這個(gè)命令比較復(fù)雜,如有需要,讀者可以詳細(xì)參閱Shell編寫(xiě)的相關(guān)資料。

上面這個(gè)循環(huán)的作用就是依次取出腳本名稱(chēng)后面的選項(xiàng),進(jìn)行處理,如果輸入了非法選項(xiàng),則進(jìn)入”?指定的部分,退出腳本程序。

第二個(gè),Bash提供了一種用于交互式應(yīng)用的擴(kuò)展select,用戶(hù)可以從一組不同的值中進(jìn)行選擇。其語(yǔ)法如下:

select var in …; do

break;

done

例如,下面這段程序的輸出是:

#!/bin/bash

echo “Your choice?”

select var in “a” “b” “c”; do

break

done

echo $var

Your choice?

1) a

2) b

3) c

第三,Shell Script中也可以使用自定義的函數(shù),其語(yǔ)法形式如下:

functionname()

{

}

例如我們可以把上面第二個(gè)例子中第四到第十二行放入一個(gè)名為help函數(shù)體內(nèi),以后每次調(diào)用的時(shí)候直接寫(xiě)help即可。函數(shù)中處理函數(shù)調(diào)用參數(shù)的方法是,直接用上面講過(guò)的$1、$2來(lái)分別表示之一、第二個(gè)參數(shù),用$*表示參數(shù)列表。

第四,我們也可以在Shell下調(diào)試Shell Script腳本,當(dāng)然最簡(jiǎn)單的方法就是用echo輸出查看變量取值了。Bash也提供了真正的調(diào)試方法,就是執(zhí)行腳本的時(shí)候用-x參數(shù)。

sh ?x filename.sh

這會(huì)執(zhí)行腳本并顯示腳本中所有變量的取值,也可以使用參數(shù)-n,它并不執(zhí)行腳本,只是返回所有的語(yǔ)法錯(cuò)誤。

關(guān)于linux shell 管道通信的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專(zhuān)業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開(kāi)發(fā),成都網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣等一站式服務(wù)。


網(wǎng)站標(biāo)題:LinuxShell管道通信:高效實(shí)現(xiàn)進(jìn)程間通信(linuxshell管道通信)
網(wǎng)站鏈接:http://www.dlmjj.cn/article/ccoeshi.html