-研發(fā)基礎(chǔ)課程-基于命令的編程_第1頁(yè)
-研發(fā)基礎(chǔ)課程-基于命令的編程_第2頁(yè)
-研發(fā)基礎(chǔ)課程-基于命令的編程_第3頁(yè)
-研發(fā)基礎(chǔ)課程-基于命令的編程_第4頁(yè)
-研發(fā)基礎(chǔ)課程-基于命令的編程_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于命令(膠水)的編程語(yǔ)言SHELL、AWK、PERL2013.05諾恩科技研發(fā)基礎(chǔ)培訓(xùn)課程必修選修公開(kāi)保密

本課程主要講述基于命令行模式的shell、awk編程,并初步描述perl在數(shù)據(jù)處理中的一般使用方式;這幾種編程語(yǔ)言的特點(diǎn)是短小、起到串聯(lián)程序的作用,配合操作系統(tǒng)自帶的crontab,能夠比較好的執(zhí)行周期性的任務(wù),多用于應(yīng)用程序的定時(shí)執(zhí)行、維護(hù)過(guò)程中的周期性、規(guī)律的錯(cuò)誤檢查;說(shuō)明目錄編程概要SHELLAWKPERL開(kāi)發(fā)語(yǔ)言沒(méi)有不好的開(kāi)發(fā)語(yǔ)言,只有不精通的開(kāi)發(fā)語(yǔ)言怎樣學(xué)習(xí)一門(mén)開(kāi)發(fā)語(yǔ)言123變量定義保留字、系統(tǒng)變量邏輯控制:判斷、循環(huán)程序結(jié)構(gòu):必須的模塊如何連接數(shù)據(jù)庫(kù)文件操作控件、組件互相調(diào)用及傳遞低層硬件操作協(xié)議操作如何優(yōu)化異常處理數(shù)據(jù)庫(kù)原理數(shù)據(jù)結(jié)構(gòu)編譯原理算法+數(shù)據(jù)結(jié)構(gòu)變量定義-匈牙利命名法前綴

類(lèi)型例子備注LmClass

LmObject表示類(lèi)型本身

不與范圍前綴結(jié)合使用

IInterface接口

IUnknown一般情況下,變量的取名方式為:

<scope_>+<prefix_>+<qualifier>。范圍前綴_,類(lèi)型前綴_,限定詞。前綴類(lèi)型例子備注g_全局作用域

g_Servers

m_成員變量

m_pDoc,l_局部作用域

l_strName少用

范圍前綴前綴類(lèi)型內(nèi)存規(guī)格描述例子chchar8-bitcharacterchGradechTCHAR16-bitcharacterif_UNICODEisdefinedchNamebBOOLBooleanvaluebEnablednintInteger(sizedependentonoperatingsystem)nLengthnUINTUnsignedvalue(sizedependentonoperatingsystem)nLengthwWORD16-bitunsignedvaluewPoslLONG32-bitsignedintegerlOffsetdwDWORD32-bitunsignedintegerdwRangep*AmbientmemorymodelpointerpDoclpFAR*FarpointerlpDoclpszLPSTR32-bitpointertocharacterstringlpszNamelpszLPCSTR32-bitpointertoconstantcharacterstringlpszNamelpszLPCTSTR32-bitpointertoconstantcharacterstringif_UNICODEisdefinedlpszNamehhandleHandletoWindowsobjecthWndlpfn(*fn)()callbackFarpointertoCALLBACKfunctionlpfnAbort類(lèi)型縮寫(xiě)編程幾個(gè)好習(xí)慣動(dòng)手編碼之前,你需要對(duì)要編碼實(shí)現(xiàn)的解決方案有一個(gè)正式的或粗略的設(shè)計(jì)。永遠(yuǎn)不要在沒(méi)有任何設(shè)計(jì)的前提下就開(kāi)始編碼,除非所編代碼不重要。優(yōu)秀的代碼文檔跟編程語(yǔ)言知識(shí)一樣重要。在代碼源文件中,為每個(gè)主要的代碼段添加注釋?zhuān)忉尨a的基本邏輯。最好注明程序的構(gòu)建和修改日期,以及修改的原因也是非常有必要的。

維護(hù)程序的各個(gè)版本同樣重要。有些編程工具都自帶一個(gè)版本管理工具。無(wú)論你什么時(shí)候改變自己的程序,它們都會(huì)將其保存為.bak文件

如果工程包含多個(gè)源文件,則創(chuàng)建一個(gè)README文件,注明每個(gè)源文件、數(shù)據(jù)文件、臨時(shí)文件以及日志文件(如果有的話)的作用。你還可以注明編譯和運(yùn)行步驟

有時(shí)候,你一定想知道為什么IF語(yǔ)句沒(méi)有得到預(yù)想的結(jié)果??赡苣闶褂玫氖堑忍?hào),也就是“=”,而不是條件判定符號(hào)“==”。一個(gè)比較好的辦法是用相反的順序?qū)憲l件語(yǔ)句。因此,你的條件語(yǔ)句應(yīng)該如下:if(10==i)…因此,如果你錯(cuò)誤地寫(xiě)成了單個(gè)等于號(hào),在編譯的時(shí)候也能檢查出來(lái)并報(bào)錯(cuò)使用循環(huán)和條件語(yǔ)句時(shí),先把左右括號(hào)對(duì)應(yīng)起來(lái),然后再在里面寫(xiě)其他語(yǔ)句使用有意義的變量和函數(shù)名稱。例如,使用‘radius’來(lái)代替圓的半徑,而不是用‘r’來(lái)表示。同樣,函數(shù)名‘calculateArea’要比其他任何隱晦的縮寫(xiě)要好得多。匆忙之下,我們也許會(huì)使用縮寫(xiě)的變量名,但一開(kāi)始節(jié)省時(shí)間的話,之后會(huì)浪費(fèi)更多的時(shí)間,去猜測(cè)縮寫(xiě)變量名代表什么

為后面的調(diào)試使用打印語(yǔ)句,這是個(gè)好習(xí)慣。但是,當(dāng)完成最后代碼后,去掉這些語(yǔ)句,有時(shí)也是一項(xiàng)危險(xiǎn)的任務(wù)。添加一個(gè)方法,用于輸出調(diào)試信息。當(dāng)最終版本生成時(shí),只要把這個(gè)方法注釋掉就行。因此,只在一個(gè)地方做修改就可以了

代碼編寫(xiě)完之后,開(kāi)始優(yōu)化代碼。之前聲明的一些變量,現(xiàn)在可能沒(méi)用了。同樣,并不依賴循環(huán)的一些聲明可以移到循環(huán)模塊之外去。扎實(shí)的編譯知識(shí)同樣會(huì)對(duì)以后的代碼優(yōu)化有所幫助

對(duì)自己的操作系統(tǒng)和硬件要有足夠的了解,你可以從資源占用等方面提升程序的性能

編寫(xiě)代碼時(shí)要合理使用縮進(jìn),以使代碼清晰可讀

研究別人編寫(xiě)的代碼。這可以讓你學(xué)習(xí)到新的編程技術(shù),以及他們解決和你相同的任務(wù)時(shí)所使用的方法

最后一條(但不是最不重要的一條),備份源代碼文件,這樣當(dāng)硬盤(pán)出錯(cuò)或相同的問(wèn)題發(fā)生時(shí),不至于前功盡棄。

SHELL、AWK、PERL的特點(diǎn)都是解釋性執(zhí)行的開(kāi)發(fā)語(yǔ)言;SHELL、AWK不能完全稱之為一門(mén)獨(dú)立的開(kāi)發(fā)語(yǔ)言,不合適完成大型的應(yīng)用系統(tǒng);變量都沒(méi)有類(lèi)型的限制,僅在上下文使用環(huán)境中才能區(qū)分出其類(lèi)型;命令行方式明顯,大量的程序構(gòu)成是獨(dú)立的命令,這些命令基本來(lái)自于操作系統(tǒng)本身基本上沒(méi)有界面開(kāi)發(fā)能力系統(tǒng)結(jié)構(gòu)基于調(diào)用,觸發(fā)少正則表達(dá)式通用,并且是關(guān)鍵,體現(xiàn)出靈活性,單獨(dú)學(xué)習(xí)正則表達(dá)式項(xiàng)目SHELLAWKPERL引號(hào)雙引號(hào)內(nèi)變量被解析,單引號(hào)內(nèi)是字符串雙引號(hào)內(nèi)是字符串,單引號(hào)內(nèi)變量被解析雙引號(hào)內(nèi)變量被解析,單引號(hào)內(nèi)是字符串比較符字符型比較符判斷數(shù)字一套字符型比較符判斷字符Awk的雙引號(hào)內(nèi)如果是os的命令,則可以被執(zhí)行,如print$2|”sort”目錄編程概要SHELLAWKPERLSHELL不適合的場(chǎng)景復(fù)雜的大項(xiàng)目需要靈活處理文件的程序,SH只能逐行讀出文件進(jìn)行處理需要圖形用戶界面的程序需要直接與系統(tǒng)硬件打交道的程序需要訪問(wèn)I/O端口和網(wǎng)絡(luò)套接字的程序需要使用庫(kù)或和以前的其他代碼整合的程序SHELLBSH,缺省SHELLCSHKSH,融合了BSH和CSH的優(yōu)點(diǎn)基本一樣,個(gè)別語(yǔ)法上有區(qū)別切換時(shí)執(zhí)行對(duì)應(yīng)SHELL程序,如kshSHELL-初識(shí)SHELL-變量如果在一個(gè)字符串中引用變量不容易被區(qū)分,使用${變量名},如計(jì)費(fèi)話單的文件名里替換賬期FILEBILL${BILL}XXX.txt;在雙引號(hào)中可以被變量值替換,在單引號(hào)中無(wú)法替換;SHELL-系統(tǒng)變量$IFS這個(gè)變量中保存了用于分割輸入?yún)?shù)的分割字符,默認(rèn)識(shí)空$HOME這個(gè)變量中存儲(chǔ)了當(dāng)前用戶的根目錄路徑。$PATH這個(gè)變量中存儲(chǔ)了當(dāng)前Shell的默認(rèn)路徑字符串。$PS1表示第一個(gè)系統(tǒng)提示符。$PS2表示的二個(gè)系統(tǒng)提示符。

$PWD表示當(dāng)前工作路徑。$EDITOR表示系統(tǒng)的默認(rèn)編輯器名稱。$BASH表示當(dāng)前Shell的路徑字符串。$0,$1,$2,...表示系統(tǒng)傳給腳本程序或腳本程序傳給函數(shù)的第0個(gè)、第一個(gè)、第二個(gè)等參數(shù)。

$#表示腳本程序的命令參數(shù)個(gè)數(shù)或函數(shù)的參數(shù)個(gè)數(shù)。

$$表示該腳本程序的進(jìn)程號(hào),常用于生成文件名唯一的臨時(shí)文件。$?表示腳本程序或函數(shù)的返回狀態(tài)值,正常為0,否則為非零的錯(cuò)誤號(hào)。

$*表示所有的腳本參數(shù)或函數(shù)參數(shù)。$@和$*涵義相似,但是比$*更安全。$!表示最近一個(gè)在后臺(tái)運(yùn)行的進(jìn)程的進(jìn)程號(hào)。$RANDOM獲取隨機(jī)變量1-65535間的整數(shù);SHELL-變量使用SHELL-變量計(jì)算SHELL-引號(hào)的使用SHELL-通配符正則表達(dá)式,模式匹配:^開(kāi)始,$結(jié)束,^$空行SHELL-狀態(tài)判斷SHELL-條件判斷SHELL-條件判斷(續(xù))SHELL-測(cè)試文件test–daaaSHELL-條件控制SHELL-程序退出為了避免程序重復(fù)執(zhí)行,可以使用文件來(lái)判斷SHELL-FOR循環(huán)SHELL-FOR循環(huán)SHELL-WHILESHELL-出口break退出當(dāng)前循環(huán),繼續(xù)下面的語(yǔ)句continue退出循環(huán)的本次運(yùn)行,進(jìn)行下一個(gè)循環(huán)exit退出程序return返回值,一般函數(shù)使用filenm=`ls/etc`forafilein$filenmdoif[$afile==“XXX”];then

break

continue

exit1fidoneSHELL-CASESHELL-函數(shù)提高復(fù)用,簡(jiǎn)化程序結(jié)構(gòu)SHELL-界面SHELL-程序結(jié)構(gòu)#!/bin/sh#########################程序說(shuō)明#########################跟蹤程序執(zhí)行set–x#函數(shù)定義func()#若干命令或循環(huán)、判斷等cd#退出,也可以不寫(xiě)exit0SHELL-程序可以把幫助等寫(xiě)成函數(shù),判斷執(zhí)行參數(shù)展示對(duì)應(yīng)內(nèi)容下面的腳本將會(huì)提示如下的信息:1)希望登錄的遠(yuǎn)程主機(jī)。2)文件傳輸?shù)念?lèi)型是二進(jìn)制方式還是ASCII方式。3)要下載的文件名。4)存放下載文件的本地目錄。實(shí)現(xiàn)腳本如下:SHELL-程序-ftpshell腳本一個(gè)常用的用途就是訪問(wèn)數(shù)據(jù)庫(kù)系統(tǒng)獲得信息。實(shí)現(xiàn)這樣的功能,<<是再理想不過(guò)了??梢杂盟鼇?lái)輸入你在面對(duì)數(shù)據(jù)庫(kù)提示時(shí)所做的各種選擇。下面的例子介紹如何使用<<來(lái)連接其他應(yīng)用程序,完成相應(yīng)的任務(wù)。SHELL-程序-dbSHELL-定時(shí)或周期運(yùn)行-crontabcrontab命令舉例說(shuō)明crontabmyfile將myfile的內(nèi)容取代crontabs原內(nèi)容crontab-r刪除現(xiàn)有的crontabs文件crontab-l顯示現(xiàn)有的crontabs文件內(nèi)容crontab–e編輯現(xiàn)有的crontabs文件內(nèi)容各字段取值舉例說(shuō)明*表示任何時(shí)間1,3,4表示離散數(shù)字1-5表示從1到51-3,5表示從1到3,還有5collrecord.sh2013041>/log/col.log2>/dev/nullcollrecord.sh201304&>/dev/null.profile命令環(huán)境初始化,也可以單獨(dú)寫(xiě)一個(gè)env的程序先執(zhí)行目錄編程概要SHELLAWKPERLAWK

AWK是一種用于處理文本的編程語(yǔ)言工具。AWK在很多方面類(lèi)似于shell編程語(yǔ)言,盡管AWK具有完全屬于其本身的語(yǔ)法。它的設(shè)計(jì)思想來(lái)源于SNOBOL4、sed、MarcRochkind設(shè)計(jì)的有效性語(yǔ)言、語(yǔ)言工具yacc和lex,當(dāng)然還從C語(yǔ)言中獲取了一些優(yōu)秀的思想。在最初創(chuàng)造AWK時(shí),其目的是用于文本處理,并且這種語(yǔ)言的基礎(chǔ)是,只要在輸入數(shù)據(jù)中有模式匹配,就執(zhí)行一系列指令。該實(shí)用工具掃描文件中的每一行,查找與命令行中所給定內(nèi)容相匹配的模式。如果發(fā)現(xiàn)匹配內(nèi)容,則進(jìn)行下一個(gè)編程步驟。如果找不到匹配內(nèi)容,則繼續(xù)處理下一行。AWK:Aho、Weinberger、KernighanAWK、GAWK、NAWKAWK-執(zhí)行方式AWK-執(zhí)行方式

1.常用模式

awk‘pattern{action}’filenameawk掃描filename中的每一行,對(duì)符合模式pattern的行執(zhí)行操作action.特例:①awk‘pattern’filename

顯示所有符合模式pattern的行②awk‘{action}’filename

對(duì)所有行執(zhí)行操作action復(fù)雜的模式是把‘pattern{action}’替換為一個(gè)awk的程序AWK-執(zhí)行方式$catemployeesTomJones44245/12/66543354MaryAdams543611/4/6328765SallyChang16547/22/54650000BillyBlack16839/23/44336500$awk‘/Mary/’employeesMaryAdams543611/4/6328765$awk‘{print$1}’employeesTomMarySallyBilly$awk‘/Sally/{print$1$2}’employeesSallyChangAWK-執(zhí)行方式2.從其它命令輸入格式:command|awk‘pattern’command|awk‘{action}’command|awk‘pattern{action}’實(shí)例:$whozhanglantty01Jan1218:36yuexitty02Jan1217:03liuzhentty15Jan1208:45$who|awk‘/tty01/{print$1}’(誰(shuí)在1號(hào)終端上)zhanglan

AWK-執(zhí)行方式3.從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))輸入格式:awk‘pattern{action}’由于未指定輸入數(shù)據(jù)來(lái)源,缺省情況下從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))讀取數(shù)據(jù).鍵盤(pán)上每輸入一行,awk就處理一行,直到遇到^D為止.例如:$awk‘/aaa/{print$0,NF}’bbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4(awk的輸出行)xxxxxxxxyyyyyyyxyz^DAWK-對(duì)文件的分拆AWK-變量及系統(tǒng)變量無(wú)類(lèi)型變量不需要先定義不能與系統(tǒng)變量重名在shell中嵌套awk使用shell中的變量num=2awk'{print$"'$num'"}'filenameawk–vnum=2'{print$num}'filenamenum=2Awk–vnum=$num'{print$num}'filenameecho$num|awk….awk可以使用字符串下標(biāo),而且不需要連續(xù)的數(shù)字序列下標(biāo)(例如,可以定義myarr[1]和myarr[1000],但不定義其它所有元素)。雖然這些都很有用,但在某些情況下,會(huì)產(chǎn)生混淆。幸好,awk提供了一些實(shí)用功能有助于使數(shù)組變得更易于管理。刪除數(shù)組元素。如果想要?jiǎng)h除數(shù)組fooarray的元素1,輸入:deletefooarray[1]如要查看是否存在某個(gè)特定數(shù)組元素,可以使用特殊的"in"布爾運(yùn)算符:if(1infooarray){print"yes!It'sthere."}else{print"no!Can'tfindit."}AWK-數(shù)組-哈希AWK-變量及條件與C語(yǔ)言類(lèi)似AWK-函數(shù)gsub(r,s)在整個(gè)$0中用s代替rgsub(r,s,t)在整個(gè)t中用s替代rindex(s,t)返回s中字符串t的第一位置length(s)返回s長(zhǎng)度match(s,r)測(cè)試s是否包含匹配r的字符串split(s,a,fs)在fs上將s分成序列asprint(fmt,exp)返回經(jīng)fmt格式化后的expsub(r,s)用$0中最左邊最長(zhǎng)的子串代替ssubstr(s,p)返回字符串s中從p開(kāi)始的后綴部分substr(s,p,n)返回字符串s中從p開(kāi)始長(zhǎng)度為n的后綴部分tolower(String)返回String參數(shù)指定的字符串,字符串中每個(gè)大寫(xiě)字符將更改為小寫(xiě)。toupper(String)返回String參數(shù)指定的字符串,字符串中每個(gè)小寫(xiě)字符將更改為大寫(xiě)。處理字符串的函數(shù)atan2(y,x)返回y/x的反正切。cos(x)返回x的余弦;x是弧度。sin(x)返回x的正弦;x是弧度。exp(x)返回x冪函數(shù)。log(x)返回x的自然對(duì)數(shù)。sqrt(x)返回x平方根。int(x)返回x的截?cái)嘀琳麛?shù)的值。rand()返回任意數(shù)字n,其中0<=n<1。srand([Expr])將rand函數(shù)的種子值設(shè)置為Expr參數(shù)的值,或如果省略Expr參數(shù)則使用某天的時(shí)間。返回先前的種子值。數(shù)學(xué)函數(shù)awk'BEGIN{b=system("ls-al");printb;}'awk'BEGIN{print"Enteryourname:";getlinename;printname;}'awk'BEGIN{while(getline<"/etc/passwd"){print$0;};close("/etc/passwd");}'其他AWK-格式化輸出AWK-自定義函數(shù)function關(guān)鍵字AWK-IF$1~/abc/等價(jià)于if($1~/abc/)do...while示例{count=1do{print"Igetprintedatleastoncenomatterwhat"}while(count!=1)?}WHILEWhile(條件){action}AWK-WHILE等同于C語(yǔ)言的for循環(huán):

for(initialassignment;comparison;increment){codeblock}示例:for(x=1;x<=4;x++){print"iteration",x}For(iinastr){}AWK-FORx=1while(1){if(x==4){x++

continue完成本次循環(huán)next完成所有action,讀入下一行數(shù)據(jù)}print"iteration",xif(x>20){

break中斷循環(huán)執(zhí)行exit退出該程序執(zhí)行}x++}AWK-出口AWK-BEGIN-ENDAWK-程序結(jié)構(gòu)BEGIN{該部分內(nèi)容在讀取數(shù)據(jù)前執(zhí)行}{Action每行都執(zhí)行該部分腳本}END{該部分內(nèi)容在讀取結(jié)束后執(zhí)行}AWK-例子awk‘{x=x+$2}{printx}’inventory累加,每行打印awk‘BEGIN{x=0}{x=x+$2}END{printx}’inventory累加,打印最后結(jié)果echo“adf::adf:f”|awk-F‘[:]+’‘{print$2}‘分隔符多樣,使用正則表達(dá)式描述awk‘{a[$0]++}END{for(iina){if(a[i]>1){printi}}}’filename打印重復(fù)行awk‘/AL/{print$3,$2;print$4,$5}’emp_names;分行,執(zhí)行多個(gè)命令awk‘/AL/{print$3,$2}{print$4,$5}’emp_names按條件執(zhí)行第一個(gè){},無(wú)條件執(zhí)行第二個(gè){}awk‘/AL|IN/’emp_names符合多個(gè)模式awk‘/[zZ]hengxh/’filename【】中的某個(gè)字符awk-F‘|’‘!a[$1]++{sum+=$3}END{printsum}’filename計(jì)算第一列不重復(fù)的行的第三個(gè)域的值累加awk'{printf("%s%s'"'%s'"'%s\n",$1,$2,$3,$4)}'fileawk‘NR==FNR{a[NR]=$1}NR!=FNR{$5=a[FNR]-$1;print}’file2file1第一個(gè)文件內(nèi)容保存到數(shù)組,在第二個(gè)文件中處理時(shí)使用,F(xiàn)NR讀入第二個(gè)文件時(shí)重置為0,而NR繼續(xù)awk-F,‘{a[$3]=$0}END{for(iina)printa[i]}’urfile第三列唯一打印本行,不唯一打印最后出現(xiàn)的行AWK-程序例子目錄編程概要SHELLAWKPERLPERLPerl(PracticalExtractionandReportLanguage)文字分析報(bào)告語(yǔ)言一個(gè)功能可以由若干種方式實(shí)現(xiàn)是perl的最大特點(diǎn)條條大路通羅馬Perl可以寫(xiě)出很晦澀難懂的語(yǔ)句,但能完成很多功能數(shù)據(jù)——Perl知道的數(shù)據(jù)控制結(jié)構(gòu)——Perl的控制結(jié)構(gòu)數(shù)組——最一般的哈?!貏e一點(diǎn)的文件操作——怎樣用Perl處理文件子程序——需要時(shí)寫(xiě)寫(xiě)強(qiáng)大的正則表達(dá)式強(qiáng)大的Perl包PERL-變量scalars標(biāo)量

用$開(kāi)頭定義的變量,比如$fooscalars數(shù)組 用@開(kāi)頭定義的變量,比如@foo,里面的每個(gè)元素都是scalarsscalars聯(lián)合數(shù)組,哈希 用%開(kāi)頭定義的變量,比如%foo,里面的每個(gè)元素都是scalars文件,大寫(xiě)字母NOTE:

1.Perl變量名稱對(duì)大小寫(xiě)敏感,$foo和$Foo是兩個(gè)不同的變量。

2.Perl每種數(shù)據(jù)結(jié)構(gòu)有專(zhuān)門(mén)的命名空間,$foo和@foo是兩個(gè)不同的變量。

3.顯式申明一個(gè)變量使用my或者our。4.在程序里使用了usestrict;則變量要先聲明;變量不分類(lèi)型,但分類(lèi)別PERL-系統(tǒng)變量1.$_$ARG,常常是一個(gè)默認(rèn)變量2.@_@ARG,子例程參數(shù)表3.{row.content}$PROGRAM_NAME,本程序的名字4.@ARGV本程序的命令行參數(shù)表5.$"$LIST_SEPARATOR,數(shù)組內(nèi)插到雙引號(hào)字符串中時(shí)所用的分隔符,默認(rèn)為空格6.$,$OFS,或$OUTPUT_FIELD_SEPARATOR,用于print的輸出字段分隔符,即一個(gè)print語(yǔ)句中用逗號(hào)分隔的部分之間用什么分隔,默認(rèn)為無(wú)7.$/$RS,或$INPUT_RECORD_SEPARATOR,輸入記錄分隔符,改變了readline,<FH>和chomp對(duì)于“行”的看法,默認(rèn)為換行符8.$.$NR,或$INPUT_LINE_NUMBER,最后讀取的“行”號(hào)(注意行的概念可能被7所改變)9.$|$AUTOFLUSH,或$OUTPUT_AUTOFLUSH,輸出緩沖區(qū)開(kāi)關(guān),默認(rèn)為0,即關(guān)10.$$$PID,或$PROCESS_ID,本腳本的進(jìn)程號(hào)(PID)11.$!$ERRNO,或$OS_ERROR,上一次系統(tǒng)調(diào)用錯(cuò)誤值12.$@$EVAL_ERROR,上一次eval操作錯(cuò)誤值13.$^I$INPLACE_EDIT,現(xiàn)場(chǎng)編輯的備份文件擴(kuò)展名14.%ENV當(dāng)前環(huán)境變量PERL-標(biāo)量操作

在Perl語(yǔ)言中變量的使用不像在C語(yǔ)言中還要事先申明,在使用純量變量的時(shí)候要先加上$這個(gè)符號(hào),要注意的是如果指定的純量變量是一個(gè)字符串的話,就要加上“”這個(gè)雙引號(hào)符號(hào)了。如果是一個(gè)數(shù)值的話,就不用加上“”這個(gè)符號(hào)了。示例:my($Str1,$str2);mystr3;$Strl="www";#將www這個(gè)字符串指定給$Strl這個(gè)純量變量;$str2="cgi";#將cgi這個(gè)字符串指定給$str2這個(gè)純量變量;$str3=$strl.$str2;#.就是把兩個(gè)字符串連起來(lái),所以$str3="wwwcgi";$str3=$str1*2;#str3=“wwwwww”$int=5;#將5這個(gè)數(shù)字指定給$int這個(gè)純量變量;$int=3+2;#此時(shí)$int=5;$int=l0;$int++;#此時(shí)$int=10+l=11;$int=l0,$int+=5;#此時(shí)$int=10+5=15;PERL-數(shù)組操作my@array=(1,4,3);數(shù)組元素個(gè)數(shù)增push@array,1,2;unshift@array,1,2;刪my$a=pop@array; my$b=shift@array;改查

$number=@array;--3$number=$#array;--2@array=(1,4,3,1,2);$array[3]=1;$array[4]=2;$a=3;@array=(1,4);@array=(2,1,1,4,3);$b=1;@array=(4,3);$array[0]=5;print"$array[0]";foreach(@array)$_foreach$var(@array)$varfor($i=0;$i<=$#array;$i++)$array[$i]Dump\@array數(shù)組下標(biāo)從0開(kāi)始PERL-數(shù)組操作@namel=(“tom”,“mary”);#將“tom”,“mary”這兩個(gè)字符串指定給數(shù)組@name1@name2=@name1; #此時(shí)的@name2=("tom","mary")@pame3=("john",@name1);#此時(shí)的(name3=("john","tom","mary")($one,@name4)=@name3; #此時(shí)的$one="john",而@name4=("tom"'"mary")@namel=0; #此時(shí)@name1為一個(gè)空數(shù)組排序 my@array=(1,4,3);按ASCII排序

my@new=sort@array;按數(shù)值(由小到大)

my@new=sort{$a<=>$b}@array;按數(shù)值(由大到?。?/p>

my@new=reversesort{$a<=>$b}@array;PERL-哈希數(shù)組操作%name=('gene1'=>2838,'gene2'=>2344)key鍵gene1;value值2838哈希長(zhǎng)度$length=keys%name;添加或修改元素$name{'gene3'}=7836;訪問(wèn)哈希$b=$name{'gene1'}刪除元素delete$name{'gene3'}判斷某個(gè)元素是否存在exists$name{'gene3'}訪問(wèn)整個(gè)哈希foreach或while等printmy@k=keys%name;

printmy@v=values%name;$name->{‘gene3’}PERL-文件操作通過(guò)句柄操作大寫(xiě)(例如:INOUTFILE)open(IN,"<","Input_file");$ate=<IN>;#按行@ate=<IN>;#全部open(OUT,">","OUT_file");printOUT"AllisOK!\n";Perl中以下句柄是默認(rèn)的:常用的:STDINSTDOUTSTDERRARGVperldocperlvar:查看關(guān)于perl內(nèi)部變量的說(shuō)明,包括以上句柄@ate=<IN>;少用。如果文件很大,那么程序消耗的內(nèi)存就會(huì)很大。通過(guò)句柄OUT把要寫(xiě)入文件里的信息和文件聯(lián)系起來(lái)。使用print函數(shù)。PERL-函數(shù)進(jìn)程處理函數(shù)eval、system等,if(eval($stmp))數(shù)學(xué)函數(shù)字符串處理函數(shù)標(biāo)量轉(zhuǎn)換函數(shù)數(shù)組和列表函數(shù)哈希函數(shù)時(shí)間函數(shù)PERL-自定義函數(shù)Perl沒(méi)有指針,但引用,具有指針的作用,比如通過(guò)引用哈希數(shù)組,可以在函數(shù)內(nèi)部把該數(shù)組值變化后帶出來(lái)定義

subsubroutine {

statements;

}調(diào)用

&subname;

subname;

dosubname;返回值return(retval);#retval可以為列表Subname(@sarry)Subname(\@sarry)如果調(diào)用的時(shí)候傳遞了參數(shù)則所有的參數(shù)存放在數(shù)組@_里面,$_[0],$_[1]…分別對(duì)應(yīng)第一、第二個(gè)參數(shù)。PERL-比較判斷StringOperationArithmeticltlessthan<gtgreaterthan>eqequalto==lelessthanorequalto<=gegreaterthanorequalto>=nenotequalto!=cmpcompare,return1,0,-1<=>OperatorOperation||,orlogicalor&&,andlogicaland!,notlogicalnotxorlogicalxorPERL-IF條件判斷

if(<expression>){ <statement_block_1>}elsif

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論