




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 入門Shell腳本最常用于系統(tǒng)管理工作,或者用于結(jié)合現(xiàn)有的程序以完成小型、特定的工作。腳本編程語(yǔ)言與編譯型語(yǔ)言的差異許多中、大型程序都是編譯型語(yǔ)言,如Fortran、Ada、C、C+或者Java(有些特殊)。這類程序只要從源代碼(SourceCode)轉(zhuǎn)換成目標(biāo)代碼(ObjectCode)便能直接通過(guò)計(jì)算機(jī)執(zhí)行。這樣的好處是高效,缺點(diǎn)是它們多半運(yùn)行于底層,處理的是字節(jié)、數(shù)字或是機(jī)器層級(jí)的對(duì)象,很難進(jìn)行“將一個(gè)目錄里所有文件復(fù)制到另一個(gè)目錄中”這類對(duì)文件的簡(jiǎn)單操作。腳本語(yǔ)言通常是解釋型(interpreted)的,由解釋器(interpreter)讀入程序代碼,將其轉(zhuǎn)換成內(nèi)部形式。好處是它們多
2、半運(yùn)行在比編譯型語(yǔ)言高的層次,能夠輕易處理文件與目錄之類的對(duì)象,缺點(diǎn)是效率不如編譯型。但是編寫更快,而且目前的速度也已經(jīng)足夠快,常用腳本語(yǔ)言有:awk、Perl、Python、Ruby與ShelloShell的特點(diǎn)有:簡(jiǎn)單性可移植性開發(fā)容易一個(gè)簡(jiǎn)單的腳本who命令可以知道系統(tǒng)有誰(shuí)登陸,如果有很多用戶在登陸,結(jié)果會(huì)很長(zhǎng),可以使用WC(字?jǐn)?shù)統(tǒng)計(jì))命令,算出行數(shù)(line)、字?jǐn)?shù)(word)和字符數(shù)(character)。可以使用wc-l,只計(jì)算出行數(shù)$who|wc-l|管道符號(hào)可以在兩個(gè)命令之間建立管道(pipeline):who的輸出成為了wc的輸入。下面就寫個(gè)shell腳本將管道轉(zhuǎn)變成一個(gè)獨(dú)立
3、的命令。$catnusers1iwhoIwc*1AD$ahmod+xnnsers$/nusera建立文件,使用cat復(fù)制終端的輸入程序的內(nèi)容Ctrl-D表示end-of-file讓文件擁有執(zhí)行的權(quán)限執(zhí)行測(cè)試其實(shí)在Shell中開發(fā)周期很類似,先直接在命令行上測(cè)試,之后寫入到獨(dú)立的腳本中。第一行的#!當(dāng)Shell執(zhí)行一個(gè)程序時(shí),要求Unix內(nèi)核啟動(dòng)一個(gè)新的進(jìn)程(process),在該進(jìn)程里執(zhí)行指定的程序。內(nèi)核知道怎樣為編譯型程序執(zhí)行,但Shell是解釋型程序,當(dāng)Shell要求內(nèi)核執(zhí)行時(shí),內(nèi)核無(wú)法執(zhí)行,會(huì)回應(yīng)”notexecutableformatfile”不是可執(zhí)行的格式文件的錯(cuò)誤信息。Shell
4、收到此錯(cuò)誤信息時(shí),就會(huì)確定不是編譯型程序,是Shell腳本,接著會(huì)啟動(dòng)一個(gè)新的/bin/sh副本來(lái)執(zhí)行該程序。在當(dāng)前有很多種Shell,需要通過(guò)第一行#!來(lái)指定用哪個(gè)Shell來(lái)執(zhí)行。一般如下:#!解釋器地址選項(xiàng)比如標(biāo)準(zhǔn)的Shell腳本:#!/bin/sh或者獨(dú)立的awk程序:#!/bin/awk-f這樣就表示為是一個(gè)awk程序。下面有些陷阱(gotchas)需要注意:系統(tǒng)對(duì)第一行#!長(zhǎng)度是有限制的,從63到1024個(gè)字符不等,因此盡量不要超過(guò)64個(gè)字符別在選項(xiàng)之后放置任何空白,因?yàn)榭瞻滓矔?huì)跟著選項(xiàng)一起傳遞給被引用程序知道解釋器的完整路徑,可以用來(lái)規(guī)避可一直行問(wèn)題。下面的寫法可以避免某種程度的
5、欺騙式攻擊(SpoofingAttack)o即添加選項(xiàng)符但不添加選項(xiàng)內(nèi)容#!/bin/sh-Shell元素命令與參數(shù)Shell最基本工作就是執(zhí)行命令。以空白隔開命令行的各個(gè)部分。命令行可以有選項(xiàng)option,分號(hào);可用來(lái)分割同一行里的多條命令。如果使用的是&符號(hào)而不是分號(hào),則Shell將在后臺(tái)執(zhí)行其前面的命令,即Shell不用等到該命令完成,就可以繼續(xù)執(zhí)行下一個(gè)命令。變量Shell里變量值可以是(而且通常是)空值null,即不包含任何字符。變量名以字母或者下劃線開頭,后面接任意長(zhǎng)度的字母、數(shù)字或下劃線。定義如下:first=hello引用該變量值,前面加上$,如echo$first如果值中含有
6、空格時(shí),需要加上引號(hào)。second=Helloworldone當(dāng)將幾個(gè)變量連接起來(lái)時(shí),需要使用引號(hào):fullname=“$first$second”printf輸出echo輸出在不同Unix版本之間選項(xiàng)有很大不同。有了printf命令,它模仿C程序庫(kù)的printf()。語(yǔ)法格式如下:printfstringarguments例子:printf“Thefirstprogramalwaysprints%s,%s!n”HelloWorldI/O重定向標(biāo)準(zhǔn)輸入(standardinput)、標(biāo)準(zhǔn)輸出(standardoutput)和標(biāo)準(zhǔn)錯(cuò)誤輸出(standarderror)。默認(rèn)情況下,許多Unix程
7、序會(huì)讀取標(biāo)準(zhǔn)輸入、寫入標(biāo)準(zhǔn)輸出,并將錯(cuò)誤信息傳遞給標(biāo)準(zhǔn)錯(cuò)誤輸出。這類程序叫做過(guò)濾器(filter)。默認(rèn)的這三類都是終端,通過(guò)cat命令可知:Empspubp-developftp$carfielIoh茁loiowareyoutowareyouvhaTisyournamekhati,yourname輸入cat后,沒有指定任何參數(shù),讀取標(biāo)準(zhǔn)輸入,寫入標(biāo)準(zhǔn)輸出,當(dāng)輸入hello后,cat返回。a)以改變標(biāo)準(zhǔn)輸入:programfile可將program的標(biāo)準(zhǔn)輸入修改為file:首先向num文件中輸入數(shù)據(jù),之后使用tr-dr命令:tr用來(lái)從標(biāo)準(zhǔn)輸入中通過(guò)替換或刪除操作進(jìn)行字符轉(zhuǎn)換。tr主要用于刪除文
8、件中控制字符或進(jìn)行字符轉(zhuǎn)換。使用tr時(shí)要轉(zhuǎn)換兩個(gè)字符串:字符串1用于查詢,字符串2用于處理各種轉(zhuǎn)換。tr剛執(zhí)行時(shí),字符串1中的字符被映射到字符串2中的字符,然后轉(zhuǎn)換操作開始。帶有最常用選項(xiàng)的tr命令格式為:tr-c-d-sstring1_to_translate_fromstring2_to_translate_to改變標(biāo)準(zhǔn)輸出:重定向符在目的文件不存在時(shí),會(huì)創(chuàng)建一個(gè),有的話就會(huì)覆蓋。比如前面的catfile可以使用在目的文件后面添加內(nèi)容。c)以I建立管道|前面命令的輸出會(huì)作為第二個(gè)命令的輸入。比如:tr-drUnix-file.txt上面管道會(huì)先刪除輸入文件的回車符,在完成數(shù)據(jù)排序后,將結(jié)果
9、輸出到目的文件。特殊文件Unix有兩個(gè)有用的特殊文件,第一個(gè)是/dev/null,是位桶(bitbucket)。傳送到此文件的數(shù)據(jù)都會(huì)被系統(tǒng)丟掉。即當(dāng)程序?qū)?shù)據(jù)寫入到此文件時(shí),實(shí)際上什么事都不會(huì)做。如果你需要的是命令的退出狀態(tài),而非它的輸出,此功能會(huì)很有用。例如測(cè)試一個(gè)文件是否包含某個(gè)模式(pattern)ifgrepthenpatternmyfile/dev/nullelse找不到模式時(shí)找到模式時(shí) fi另一個(gè)特殊文件時(shí)/dev/tty。當(dāng)程序打開此文件時(shí),Unix會(huì)自動(dòng)將它重定向到一個(gè)終端再與程序結(jié)合。這在程序必須讀取人工輸入時(shí)(如密碼)特別有用。此外,用它來(lái)產(chǎn)生錯(cuò)誤信息也很方便,但很少有人
10、這么用。關(guān)閉自動(dòng)打印輸入字符的功能讀取密碼提示再輸人一次再讀取一次以確認(rèn)別忘了打開自動(dòng)打印輸入宇符的功能printf11Enternewpassword:*提示輸入stty-echoreadpass/dev/ttyprintfnEnteragain:readpa.ss2quotas.soirtiEdsedr/#/drsalesIsortsales.sorted-#以第一亍鍵值作結(jié)合,將結(jié)果產(chǎn)生至標(biāo)準(zhǔn)輸出joinquotassortedsalesrsorted-J#刪除緩存文件nnquotastsortecSsales/sorted執(zhí)行結(jié)果為:sed程序一般執(zhí)行文本替換的程序時(shí)sed,流編輯器(
11、StreamEditor)。一般在管道中間使用sed來(lái)執(zhí)行替換操作。做法是使用s命令-要求正則表達(dá)式尋找,用替代文本(replacementtext)替換匹配的文本。awk命令awk主要功能為做一些簡(jiǎn)易的文本處理,如取出字段并重新編排。語(yǔ)法:awkprogramfile.awk讀取命令行上指定的各個(gè)文件(若無(wú),則為標(biāo)準(zhǔn)輸入),一次讀取一行記錄,針對(duì)每一行,執(zhí)行應(yīng)用程序指定的命令。awk程序基本構(gòu)架為:patternactionpattern或是action都能省略。省略patter,則會(huì)對(duì)每條記錄執(zhí)行action,省略action怎等于print。awk讀取輸入記錄,然后自動(dòng)將各個(gè)記錄切分為字段,awk將每條記錄內(nèi)的字段數(shù)目,存儲(chǔ)到內(nèi)建變量NF。如需字段值,搭配$字符。下面幾個(gè)例子:編號(hào)為0的字段表示整條記錄。處理/etc/passwd齟叱號(hào)實(shí)際用戶輸出分割字符時(shí)分開的,可以使用-F分割符的方式來(lái)設(shè)置分隔符。如對(duì)于/etc/passwd文件的內(nèi)容:$awk-F;fprint$51/etc/pa
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具拆卸搬運(yùn)合同范本
- 點(diǎn)火系統(tǒng):點(diǎn)火開關(guān)競(jìng)爭(zhēng)策略分析報(bào)告
- 中醫(yī)護(hù)理質(zhì)量自查報(bào)告
- 個(gè)人股份協(xié)議書
- 個(gè)人租房合同簡(jiǎn)易版
- 廈門運(yùn)輸合同范例
- 賣煤提成合同范例
- 丑小鴨閱讀心得體會(huì)
- 廠房裝修材料合同范本
- 廚房櫥柜合同范本
- GB 21240-2007液壓電梯制造與安裝安全規(guī)范
- 家具廠安全生產(chǎn)操作規(guī)程大全
- 神經(jīng)病學(xué)-緒論課件
- 危險(xiǎn)化學(xué)品全表
- 公路施工技術(shù)全套課件
- 胸痹心痛中醫(yī)診療方案及臨床路徑
- 泛讀2unit2-music
- 中學(xué)生防溺水安全教育課件(PPT 44頁(yè))
- 2019版外研社高中英語(yǔ)選擇性必修二Unit 1 Growing up 單詞表
- 有機(jī)金屬化學(xué)1
- JIT標(biāo)準(zhǔn)作業(yè)作業(yè)指導(dǎo)書
評(píng)論
0/150
提交評(píng)論