




已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
入門Shell腳本最常用于系統(tǒng)管理工作,或者用于結合現(xiàn)有的程序以完成小型、特定的工作。腳本編程語言與編譯型語言的差異許多中、大型程序都是編譯型語言,如Fortran、Ada、C、C+或者Java(有些特殊)。這類程序只要從源代碼(Source Code)轉換成目標代碼(Object Code)便能直接通過計算機執(zhí)行。這樣的好處是高效,缺點是它們多半運行于底層,處理的是字節(jié)、數(shù)字或是機器層級的對象,很難進行“將一個目錄里所有文件復制到另一個目錄中”這類對文件的簡單操作。腳本語言通常是解釋型(interpreted)的,由解釋器(interpreter)讀入程序代碼,將其轉換成內(nèi)部形式。好處是它們多半運行在比編譯型語言高的層次,能夠輕易處理文件與目錄之類的對象,缺點是效率不如編譯型。但是編寫更快,而且目前的速度也已經(jīng)足夠快,常用腳本語言有:awk、Perl、Python、Ruby與Shell。Shell的特點有:1. 簡單性2. 可移植性3. 開發(fā)容易一個簡單的腳本who命令可以知道系統(tǒng)有誰登陸,如果有很多用戶在登陸,結果會很長,可以使用wc(字數(shù)統(tǒng)計)命令,算出行數(shù)(line)、字數(shù)(word)和字符數(shù)(character)。可以使用wc l,只計算出行數(shù)$ who | wc l| 管道符號可以在兩個命令之間建立管道(pipeline):who的輸出成為了wc的輸入。下面就寫一個shell腳本將管道轉變成一個獨立的命令。其實在Shell中開發(fā)周期很類似,先直接在命令行上測試,之后寫入到獨立的腳本中。第一行的#!當Shell執(zhí)行一個程序時,要求Unix內(nèi)核啟動一個新的進程(process),在該進程里執(zhí)行指定的程序。內(nèi)核知道怎樣為編譯型程序執(zhí)行,但Shell是解釋型程序,當Shell要求內(nèi)核執(zhí)行時,內(nèi)核無法執(zhí)行,會回應”not executable format file”不是可執(zhí)行的格式文件的錯誤信息。Shell收到此錯誤信息時,就會確定不是編譯型程序,是Shell腳本,接著會啟動一個新的/bin/sh副本來執(zhí)行該程序。在當前有很多種Shell,需要通過第一行#!來指定用哪個Shell來執(zhí)行。一般如下:#! 解釋器地址 選項比如標準的Shell腳本:#! /bin/sh或者獨立的awk程序:#! /bin/awk f 這樣就表示為是一個awk程序。下面有些陷阱(gotchas)需要注意:1. 系統(tǒng)對第一行#!長度是有限制的,從63到1024個字符不等,因此盡量不要超過64個字符2. 別在選項之后放置任何空白,因為空白也會跟著選項一起傳遞給被引用程序3. 知道解釋器的完整路徑,可以用來規(guī)避可一直行問題。 下面的寫法可以避免某種程度的欺騙式攻擊(Spoofing Attack)。即添加選項符-,但不添加選項內(nèi)容#! /bin/sh -Shell元素命令與參數(shù)Shell最基本工作就是執(zhí)行命令。以空白隔開命令行的各個部分。命令行可以有選項option,分號;可用來分割同一行里的多條命令。如果使用的是&符號而不是分號,則Shell將在后臺執(zhí)行其前面的命令,即Shell不用等到該命令完成,就可以繼續(xù)執(zhí)行下一個命令。變量Shell里變量值可以是(而且通常是)空值null,即不包含任何字符。變量名以字母或者下劃線開頭,后面接任意長度的字母、數(shù)字或下劃線。定義如下:first = hello引用該變量值,前面加上$,如echo $first如果值中含有空格時,需要加上引號。second = Hello world one當將幾個變量連接起來時,需要使用引號:fullname = “$first $second”printf輸出echo輸出在不同Unix版本之間選項有很大不同。有了printf命令,它模仿C程序庫的printf()。語法格式如下:printf string arguments例子:printf “The first program always prints %s, %s!n” Hello WorldI/O重定向標準輸入(standard input)、標準輸出(standard output)和標準錯誤輸出(standard error)。默認情況下,許多Unix程序會讀取標準輸入、寫入標準輸出,并將錯誤信息傳遞給標準錯誤輸出。這類程序叫做過濾器(filter)。默認的這三類都是終端,通過cat命令可知:輸入cat后,沒有指定任何參數(shù),讀取標準輸入,寫入標準輸出,當輸入hello后,cat返回。a) 以 改變標準輸入:program file可將program的標準輸入修改為file:首先向num文件中輸入數(shù)據(jù),之后使用tr d r命令:tr用來從標準輸入中通過替換或刪除操作進行字符轉換。tr主要用于刪除文件中控制字符或進行字符轉換。使用tr時要轉換兩個字符串:字符串1用于查詢,字符串2用于處理各種轉換。tr剛執(zhí)行時,字符串1中的字符被映射到字符串2中的字符,然后轉換操作開始。 帶有最常用選項的tr命令格式為: tr -c -d -s string1_to_translate_from string2_to_translate_to 改變標準輸出:重定向符在目的文件不存在時,會創(chuàng)建一個,有的話就會覆蓋。比如前面的cat file可以使用在目的文件后面添加內(nèi)容。c) 以 | 建立管道| 前面命令的輸出會作為第二個命令的輸入。比如:tr -d r Unix-file.txt上面管道會先刪除輸入文件的回車符,在完成數(shù)據(jù)排序后,將結果輸出到目的文件。Tr用于轉換字符特殊文件Unix有兩個有用的特殊文件,第一個是/dev/null,是位桶(bit bucket)。傳送到此文件的數(shù)據(jù)都會被系統(tǒng)丟掉。即當程序將數(shù)據(jù)寫入到此文件時,實際上什么事都不會做。如果你需要的是命令的退出狀態(tài),而非它的輸出,此功能會很有用。例如測試一個文件是否包含某個模式(pattern)if grep pattern myfile /dev/nullthen 找到模式時else 找不到模式時fi另一個特殊文件時/dev/tty。當程序打開此文件時,Unix會自動將它重定向到一個終端再與程序結合。這在程序必須讀取人工輸入時(如密碼)特別有用。此外,用它來產(chǎn)生錯誤信息也很方便,但很少有人這么用。stty(set tty)命令用來控制終端的各種設置,-echo用來關閉自動打印每個輸入字符的功能。stty echo用來恢復該功能。基本命令查找Shell會沿著查找路徑$PATH來尋找命令,這是以冒號分割的目錄列表,可以在列表指定的目錄下找到所要執(zhí)行的命令。默認路徑因系統(tǒng)而已,至少包含/bin與/usr/bin,如果要自己編寫腳本,準備自己的bin目錄來存放。步驟如下:要讓修改永久生效,在.profile文件中把你的bin目錄假如$PATH,每次登錄時Shell都將讀取.profile文件。訪問Shell腳本參數(shù)位置參數(shù)(position parameters)指的是Shell腳本的命令行參數(shù)。參數(shù)使用”$數(shù)字”的形式表示,當參數(shù)大于9時,使用$數(shù)字。比如我們使用who | grep mushui命令來查找登錄用戶mushui的信息。寫成Shell腳本為:但是現(xiàn)在這個shell只能處理有參數(shù)的,如果沒有參數(shù)會出錯:簡單的執(zhí)行跟著程序執(zhí)行出錯時,可以把執(zhí)行跟蹤(execution tracing)的功能打開。這會使Shell顯示每個被執(zhí)行到的命令,并在前面加”+”:一個加號后面跟著一個空格??梢栽趫?zhí)行腳本時,使用sh x 腳本 腳本的方式執(zhí)行跟蹤功能。也可以在腳本中添加set x打開跟蹤功能,使用set +x 關閉跟蹤功能。查找與替換查找文本有三種程序可以用來查找整個文本文件:1. grep,使用基本的正則表達式2. egrep,使用擴展的正則表達式3. fgrep,快速grep,匹配固定字符串而不是正則表達式,并且grep與egrap只能匹配單個正則表達式,而fgrep使用不同算法,能匹配多個字符串。grep E 相當于egrepgrep F相當于是fgrep-i 列出匹配模式的文件名稱,而不是打印匹配的行-q 如果模式匹配成功,則grep會成功離開,不講匹配的行寫入標準輸出,否則即使不成功。-s 不顯示錯誤信息,通常與-q并用-v 顯示不匹配的行使用cut選定字段cut命令用來剪下文本文件里的數(shù)據(jù),可以是字段類型或是字符類型。注意:一個制表符再次被視為單個字符。下面命令可顯示系統(tǒng)上每個用戶的登錄名及其全名:cut語法如下:cut -c list filecut -f list -d delim file主要選項:-c list 以字符為主,執(zhí)行剪下的操作。list為字符編號或一段范圍的列表(以逗號分割),如1,3,5-12,42-d delim 通過-f選項,使用delim作為定界符,上例中即使用“:”作為定界符。默認為制表符。-f list 以字段為主,作剪下的操作。list為字段編號或一段范圍的列表。例子中即代表取第1個和第5個。使用join連接字段join命令可以將多個文件結合在一起,每個文件里的每條記錄,共享一個鍵值key,鍵值指的是記錄中的主字段。語法為:join option file1 file2選項:-1 field1-2 field2標明要結合的字段,-1 field1指的是從file1取出field1,從file2中取field2,字段編號從1開始。-o file.field輸出file文件的field字段??梢允褂枚鄠€-o選項,輸出多個字段。-t separator使用separator分隔符,此字符頁尾輸出的字段分隔符。例子如下:腳本如下:執(zhí)行結果為:sed程序一般執(zhí)行文本替換的程序時sed,流編輯器(Stream Editor)。一般在管道中間使用sed來執(zhí)行替換操作。做法是使用s命令-要求正則表達式尋找,用替代文本(replacement text)替換匹配的文本。awk命令awk主要功能為做一些簡易的文本處理,如取出字段并重新編排。語法:awk program file awk讀取命令行上指定的各個文件(若無,則為標準輸入),一次讀取一行記錄,針對每一行,執(zhí)行應用程序指定的命令。awk程序基本構架為:pattern actionpattern或是action都能省略。省略patter,則會對每條記錄執(zhí)行action,省略action怎等于print。awk讀取輸入記錄,然后自動將各個記錄切分為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市崇文區(qū)2025屆數(shù)學四下期末教學質量檢測模擬試題含解析
- 西安石油大學《泌尿、生殖與內(nèi)分泌系統(tǒng)醫(yī)學教程》2023-2024學年第二學期期末試卷
- 四平職業(yè)大學《設計基礎》2023-2024學年第二學期期末試卷
- 棗莊科技職業(yè)學院《職前與就業(yè)訓練》2023-2024學年第二學期期末試卷
- 2025年全球光纖行業(yè)深度洞察:市場規(guī)模達480億美元 技術創(chuàng)新重塑產(chǎn)業(yè)格局
- N1叉車司機模擬試題及答案
- 頂樓樓梯欄桿施工方案
- 公墓改造現(xiàn)場施工方案
- 2025年科目一公路試題及答案
- 分體空調施工方案
- 高中主題班會 復盤-在思考中學習課件-高中上學期主題班會
- 中考生物總復習《用藥、急救與健康地生活》專項測試題及答案
- 2.2學會管理情緒 課件 -2024-2025學年統(tǒng)編版道德與法治七年級下冊
- 2024-2025學年第二學期教學教研工作安排表 第二版
- 2024年高州市人民醫(yī)院廣東醫(yī)學院附屬高州醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 出租汽車行業(yè)安全監(jiān)管與自律
- 開展課外讀物負面清單管理的具體實施舉措方案
- 加油站常見安全隱患
- 數(shù)據(jù)質量管理實施手冊
- 2025年醫(yī)院基本公共衛(wèi)生服務項目工作計劃
- 2025年福建能化集團招聘筆試參考題庫含答案解析
評論
0/150
提交評論