出版時(shí)間:2012-9 出版社:清華大學(xué)出版社 作者:帕克 頁數(shù):534 字?jǐn)?shù):840000 譯者:萬千
Tag標(biāo)簽:無
內(nèi)容概要
《Shell腳本編程訣竅--適用于Linux\Bash等》介紹shell腳本編程,主要針對(duì)Bourne
shell與POSIX兼容的shell,但也廣泛涵蓋了新近的一些發(fā)展情況,尤其是bash shell。bash
shell幾乎總是會(huì)包含在GNU/Linux操作系統(tǒng)中,也包含在了大多數(shù)商業(yè)Unix中。另外,KornShell也被廣泛用于大部分這樣的閉源或開源操作系統(tǒng)中。
Steve Parker的《Shell腳本編程訣竅--適用于Linux\Bash等》分為4
個(gè)部分。第Ⅰ部分介紹shell的基本功能和語法;第Ⅱ部分介紹shell腳本可以使用的工具;第Ⅲ部分給出了一些涵蓋更廣泛話題的實(shí)用腳本;第Ⅳ
部分是參考信息。
作者簡(jiǎn)介
作者:(英國(guó))帕克(Steve Parker) 譯者:萬千 Steve Parker,是具有20年Unix經(jīng)驗(yàn)與15年GNU/Linux經(jīng)驗(yàn)的Unix與Linux顧問。他編寫了在線shell腳本編程教程并對(duì)其進(jìn)行維護(hù)。Steve提供IT咨詢服務(wù),還提供shell腳本編程與Unix、Linux技術(shù)的培訓(xùn)課程。
書籍目錄
第1部分 基本概念
第1章 Unix、GNU和Linux的歷史
1.1 1 Jnix
1.1.1 “一切皆文件”與管道
1.1.2 BSD
1.2 GNU
1.3 Linux
1.4 本章小結(jié)
章節(jié)摘錄
版權(quán)頁: 插圖: 17.1.3潛在的陷阱 正確地進(jìn)行碰撞檢測(cè)會(huì)有些困難,尤其是外星人寬度大于一個(gè)單元格的時(shí)候。讓屏幕保持干凈也需要謹(jǐn)慎進(jìn)行。對(duì)屏幕進(jìn)行太多刷新會(huì)毀掉游戲,因?yàn)闀?huì)導(dǎo)致過度閃爍。相對(duì)而言,調(diào)用clear命令會(huì)花較長(zhǎng)時(shí)間,并且使屏幕非常閃爍。 編寫代碼時(shí),該腳本的最顯著的改變?cè)谟趂or循環(huán)中模功能從函數(shù)調(diào)用轉(zhuǎn)移為外部expr命令。這意味著對(duì)每個(gè)外星人(無論死活)調(diào)用expr,然后替換為內(nèi)嵌的((…%2))結(jié)構(gòu)。從expr到內(nèi)嵌方法的修改意味著可以改變外星人的形狀。不修改的話,執(zhí)行會(huì)非常緩慢。將模值從for循環(huán)中取出也會(huì)效率更高一些,但不會(huì)特別明顯。 17.1.4腳本結(jié)構(gòu) 腳本的開頭與結(jié)尾是tput命令。它可以使光標(biāo)在游戲開始前消失(tput cinvis),然后在退出后又出現(xiàn)(tput cvvis)。另一個(gè)較小的修改是在游戲結(jié)束時(shí)取消SIGALRM上的trap,這樣move函數(shù)在腳本結(jié)束后就不會(huì)發(fā)送SIGALRM信號(hào)。這些只是小細(xì)節(jié),但可以對(duì)效果有相當(dāng)大的改觀。否則,如果沒有它們,效果會(huì)差很多。 該腳本由4個(gè)關(guān)鍵函數(shù)與一個(gè)主循環(huán)構(gòu)成。從腳本的底部往上,主循環(huán)只從鍵盤讀取一個(gè)字符(read—n 1)。如果是“左”或“右”指令(分別為a和1),則循環(huán)更新飛船的位置。飛船將立刻被重新繪制。如果按下的是開火按鈕(f),且激光炮不處于使用狀態(tài)(cannonY—eq0),則cannonX變量相對(duì)于飛船當(dāng)前的x軸坐標(biāo)進(jìn)行賦值,cannonY被賦值為飛船的Y軸坐標(biāo)(固定在屏幕的底部)。 只要按鍵移動(dòng)了飛船,主循環(huán)就調(diào)用drawship。該函數(shù)用printf語句清空屏幕的整個(gè)底行,并將飛船中的激光炮用彩色顯示,用以表示是否裝配了火炮。這與move函數(shù)是獨(dú)立的,并且能實(shí)時(shí)地更新飛船的移動(dòng),且與單調(diào)緩慢的外星飛船的更新不同。drawship也在move函數(shù)中調(diào)用,這樣即使在飛船沒有移動(dòng)的情況下,火炮的更新也能正常反映出來。 主循環(huán)的開頭是move函數(shù)。move函數(shù)使用SIGALRM在$DELAY秒之后調(diào)用自身。DELAY會(huì)隨著時(shí)間推移越來越小,所以外星人下降的速度越來越快。每次調(diào)用move時(shí),外星人在它們的前進(jìn)方向上移動(dòng)一格。當(dāng)它們到達(dá)屏幕的邊界時(shí),就翻轉(zhuǎn)direction變量使它們向相反的方向運(yùn)動(dòng)。外星人在每次抵達(dá)屏幕的右邊時(shí)都會(huì)向下移動(dòng)一行f通過增加ceilin9變量)。 move隨后對(duì)每行外星人調(diào)用一次drawrow函數(shù)。因?yàn)閎ash沒有多維數(shù)組,所以外星人的行數(shù)被硬編碼到腳本中。使用循環(huán)來遍歷所有行是一個(gè)不錯(cuò)的選擇,就算有6行外星人,6次調(diào)用drawrow函數(shù)也不會(huì)顯得太笨拙。在顯示過程中,drawrow返回碰到炮彈的所有外星人的索引號(hào),如果當(dāng)前行中沒有外星人被擊中則返回0。這樣對(duì)數(shù)組的結(jié)構(gòu)產(chǎn)生了一些額外的效果。數(shù)組從0開始索引,但因?yàn)?在drawrow函數(shù)的返回碼中具有特殊意義,所以保存外星人分值的數(shù)組row0到row5不使用0號(hào)索引。這或許有些拙劣,但可以使每一行在調(diào)用drawrow之后進(jìn)行直接賦值rowx[$?】=0。如果$?為0,則更新未使用的0號(hào)索引,對(duì)其他數(shù)組元素沒有影響。如果$?大于0,則它會(huì)指向某個(gè)外星人,然后將存儲(chǔ)其得分值的數(shù)組元素賦值為0。這樣一來,隨后對(duì)drawrow的調(diào)用不會(huì)在原來位置顯示外星人,并且碰撞檢測(cè)會(huì)允許炮彈通過該位置而不停下來。更簡(jiǎn)潔的實(shí)現(xiàn)方法要求對(duì)drawrow的每次調(diào)用之后都有一些更加復(fù)雜的代碼。這些代碼會(huì)檢查返回值,并且在外星人被擊中的情況下更新數(shù)組。該腳本使用的方法使得游戲在最低限度上能快速運(yùn)行,并且更重要的是易于閱讀與管理。
編輯推薦
《Shell腳本編程訣竅:適用于Linux、Bash等》是為了對(duì)shell進(jìn)行較為全面的介紹,并且無論用戶具有何種背景與經(jīng)驗(yàn)都能從《Shell腳本編程訣竅:適用于Linux、Bash等》中得到一些收獲?!禨hell腳本編程訣竅:適用于Linux、Bash等》主要面向中級(jí)與高級(jí)Unix與Linux管理員,以及可能感興趣的其他高級(jí)用戶?!禨hell腳本編程訣竅:適用于Linux、Bash等》假設(shè)讀者至少會(huì)用一種Unix系統(tǒng),并且可能已經(jīng)編寫了一些shell腳本,但希望提高自身腳本編寫的水平。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載