撰寫本書的起因
雲計算時代的到來,為企業帶來了新的機遇與挑戰。有了雲計算,所有的資源都可以按需購買,類似於訂火車票這樣的問題迎刃而解。但是,雲計算也給我們帶來了新的難題,那就是如何更好地實現自動化運維、智能化運維!我們可以通過Shell、Python、Perl等腳本語言編寫自動化腳本實現這樣的目標。雖然Python在一些大的自動化項目中已經得到了充分的歷練,但是作為Linux自動化運維的主流編程語言,Shell腳本依然不可替代,大量的自動化運維腳本依然需要使用Shell編寫。而目前市面上常見的Shell腳本書籍,絕大多數還停留在講解語法格式、知識點這個層面,很多讀者讀完類似Shell腳本的圖書,發現語法格式學會了,但是在實際編寫腳本時卻又無從下手。編寫本書的出發點就是希望在簡單、直觀地展現語法格式的同時,通過大量、深入的應用案例,幫助讀者朋友們鍛煉實際編寫腳本的能力,培養思考問題、解決問題的能力。
Shell是一門非常容易上手且功能強大的編程語言,很多Linux繫統維護者在工作中都會經常使用Shell腳本,但並不是每個人都擅長編寫Shell腳本,一旦掌握了編寫Shell腳本的規則與技巧,未來你的工作會更加輕松、更加高效!從1991年起至今,Linux已經快速成長為企業服務器產品的首選操作繫統,越來越多的IT企業采用Linux作為其服務器端平臺操作繫統,為客戶提供高性能、高可用的業務服務。本書在選擇操作繫統發行版本時,綜合了各個發行版本的特點,最終選擇了CentOS作為本書的基礎繫統平臺。CentOS是眾多Linux發行版本之一,但因為其源自RedHat框架,同時該版本完全開源,包括開放的軟件YUM源,可以為用戶帶來更加方便的升級方法。另外,目前國內很多企業對於CentOS發行版也非常熱衷,這也增加了本書的實用性。
本書結構
本書分為7章。
第1章主要講述編寫Shell腳本的基本格式及執行腳本的各種方式,如何通過腳本處理變量、使用正則過濾數據、在腳本中進行算術運算。
主要內容包括:
?腳本的書寫格式、執行腳本的各種方式。
?數據的輸入與輸出、如何正確使用變量。
?數據過濾與正則表達式。
?算術運算。
第2章主要討論如何讓腳本變得更加智能,通過判斷語句對各種業務可能出現的狀況做出分析與判斷,並根據判斷結果進行相應的處理。本章會通過大量的案例展示如何編寫一個更加健全、智能的自動化腳本。
主要內容包括:
?如何在腳本中實現各種測試和判斷。
?if語句與case語句的基本語法格式。
?模式匹配、通配符與擴展通配符。
?編寫行業項目案例。
第3章主要講解如何使用循環避免人為執行工作中大量重復性的任務,大量且重復的機械式任務更適合讓機器來完成。當人們找到解決問題的思路和方法後,機器可以更加高效地按照人類的思路和方法處理數據,最終獲得我們需要的結果。
主要內容包括:
?for與while循環的基本語法格式。
?解決猴子喫香蕉的問題。
?神奇的循環嵌套。
?猜隨機數字的遊戲。
?until和select的基本語法格式。
?循環的中斷與退出。
?機選雙色球。
第4章主要講解數組、子Shell與函數。講解數組在實際業務中的應用案例,分析子Shell對腳本的影響,講解函數式編程思想,使用Shell腳本分析目前主流的排序算法。
主要內容包括:
?斐波那契數列。
?網站日志分析腳本。
?啟動進程的若干種方式。
?函數與變量的作用域。
?多進程腳本。
?文件描述符與命名管道。
?排序算法。
第5章主要講解日常工作中編寫腳本的一些技巧與方法,利用Shell的眾多功能特性,可以讓我們更加輕松地編寫功能完善的腳本。本章還通過案例介紹了Shell腳本排錯的方法與技巧。
主要內容包括:
?Shell的擴展功能。
?Shell解釋器的屬性與初始化命令行終端。
?trap信號捕獲。
?腳本排錯技巧。
?xargs與shift。
?編寫行業項目案例。
第6章主要講解文本編輯器sed,腳本借助於sed可以實現非交互編輯文件。在雲計算運維工作中,我們經常需要修改或查看配置文件,本章通過大量案例演示如何通過腳本非交互地修改各種服務的配置文件。我們通過sed還可以在海量的數據中過濾需要的數據,可以編寫網絡爬蟲腳本。
主要內容包括:
?sed語法格式。
?自動配置FTP、DHCP、SSH等網絡服務。
?自動化克隆與修改KVM虛擬機。
?網絡爬蟲。
?抽獎器。
第7章主要講解awk編程語言,我們可以通過awk在腳本中實現更加靈活的數據過濾功能,可以通過awk進行數據統計工作,使用awk編寫網絡爬蟲腳本。
主要內容包括:
?awk基本語法格式。
?監控主機網絡連接狀態。
?性能監控腳本。
?數據庫監控腳本。
?網絡爬蟲。
排版說明
關於本書中的排版,對於需要讀者輸入的命令,書中將使用等比例黑體加粗顯示;對於計算機命令的返回結果,書中將使用等比例斜體字顯示。當需要在文件中編寫腳本時,對於打開及修改文本文件中的內容,書中會把文件中的內容放置於方框中排版和書寫;對於需要讀者注意的地方,書中會給出明確的注意提示。
本書讀者
本書可以作為學習Shell編程的一本指南,主要針對具有Linux相關經驗的從業人員,本書可以指導我們編寫工作中需要的自動化運維腳本。另外,本書可以作為計算機培訓參考教材。
關於配置文件及代碼
本書部分主要的配置文件及代碼可以在GitHub下載,地址為:https://github.com/ jacobproject/shell_scripts。
勘誤
作者在編寫本書的過程中已經花了大量的時間對內容進行審核與校驗,但因為時間緊迫、精力有限,書中難免出現一些錯漏,敬請廣大專家和讀者批評、指正。
關於本書,您有任何意見或建議,都可以發送郵件至ydh0011@163.com或使用博客平臺https://blog.51cto.com/manual與我交流。
致謝
由於本書是我利用業餘時間編寫的,占用了大量本應該和家人在一起的歡樂時光,在此感謝家人對我的支持與勉勵,感謝我的兒子(子墨)和女兒(紫悅)給家庭帶來的無限歡樂。感謝我所有的同事對此項任務的全力配合與支持。感謝我的學生對本書的期待,是他們的無形支持促成了我編寫本書。感謝生活中所有給予我幫助的朋友,是他們的支持讓我不斷地進步與創新,不管是工作中還是生活中,好朋友都是我成功的堅實後盾。感謝電子工業出版社的董英編輯為本書的出版提供的大力支持。感謝趙瑞傑為本書的修訂提供的建議。
丁明一 北京
推薦序1
非常高興得知好友丁明一老師的新書《Linux Shell核心編程指南》即將出版。同時有幸第一時間拜讀了本書的電子版。本書所有內容皆源於丁老師的日常工作積累,作為一個有著十多年行業經驗的一線Linux專家級講師,丁老師將多年的教學與實踐經驗進行了總結,融會貫通,皆為精華。本書不單講解Shell的各種語法及功能,還包含大量的有趣案例,都是丁老師在教學中積累的,極具參考價值。
目前市場上的IT類書籍琳瑯滿目,但許多是翻譯國外現有書籍或趕工之作,在內容的專業性及文筆上或有欠缺,甚至讓人產生更多的困惑。這也是很多專家和老師推薦直接閱讀和學習外文原版書籍的原因,當然這對學員的科技英文閱讀能力是小小的挑戰。如今,有口皆碑的IT類書籍無不來自於作者在本專業的長期研究和思考,所幸《Linux Shell 核心編程指南》即屬於此類濃縮作者經驗的書籍,這也是我在此鄭重推薦這本書的原因。
如今的IT領域,掌握自動化運維技能真的相當重要。無論是基礎的Linux,還是雲平臺,運維、開發和測試人員均以DevOps思想來指導和開展工作,各種自動化運維工具如Python、Perl、Ansible、Puppet等不斷湧現,但是Shell永遠是一切的基礎。Shell可以將Linux中的每條專注而高效的任務命令組合起來,從而完成復雜而美妙的事務。每位Linux工程師和學員皆明白腳本的重要性,尤其是在這個對自動化運維及運維開發工程師需求日益強烈的時代。Shell可以很簡單,更可以很高效。類似於所有編程語言,如想掌握Shell編程的精華,一是要非常熟悉Linux中的各種命令參數,二是要勤於實踐,三是要參考大師寫的代碼實例。初學者可在閱讀本書的基礎上,先模擬老師的案例代碼,然後通過記憶來復現,最後舉一反三,融會貫通。有經驗的工程師則可以從本書中直接產生共鳴,獲取靈感。
我相信,每位讀者皆可以從本書中覓得驚喜。希望大家都能由此愛上Shell編程,愛上Linux,愛上開源。最後,再次衷心感謝丁明一老師對開源事業的辛勤付出!
賀正剛
紅帽中國技術交付經理、高級認證考官
推薦序2
多年來,一直希望工作在IT運維或培訓第一線的技術人員能不斷總結經驗,將其寫成實用的小段子,甚至整理成書籍出版。今天很高興看到了丁老師的書稿。
計算機技術既有高深的理論,又有非常強的實踐性,很多相關操作必須自己動手做實驗,甚至要經過多次失敗纔能夠達到自己理想的目標。本書所涉及的Shell是既古老又年輕的技術。從UNIX、Linux使用的初始階段,Shell就伴隨著用戶。而今在IT市場充斥著數字化轉型等新名詞的階段,Shell腳本仍然在諸多方面起到至關重要的作用。
本書的特點是深入淺出,注重實用和實例。作為開源培訓領域的資深講師,丁老師在循序漸進地講解技術方面有著多年的成功經驗。與學院派的風格不同,職業教育更注重每項技術、技能在實際工作場合中的用途,相信讀者在邊讀邊做的過程中會有自己的切身體會。
淮晉陽
紅帽中國培訓渠道客戶經理
推薦序3
很多剛開始學習Shell腳本編程的人,在學習了基本語法後,都會因為缺乏腳本案例而沒有編寫腳本的思路,很多人還沒有開始真正的編程就已經放棄,這也是目前市面上其他類似圖書的缺陷。而本書的亮點是既講解了Shell的語法格式,又能讓讀者通過大量案例腳本,驗證所學知識,構建編寫腳本的思路,難能可貴。
周華飛
達內集團Python人工智能教學研發總監
推薦序4
以雲計算、大數據、物聯網和人工智能為代表的ICT技術在過去20年取得了巨大的進步,今天雲化IT基礎設施已經成為很多企業的選擇,極大地降低了企業的創新門檻和業務成本。大數據分析技術也在科技、商業、制造領域得到廣泛應用,通過對海量數據的分析,我們對這個世界的運行方式有了更深入的理解。圖像識別、語音識別在很多場景下都得到了廣泛應用,各種智能機器人也從工業領域走向日常生活,讓我們的生活變得越來越智慧和便捷。
信息技術的發展,以及和行業的深入結合,讓行業的智能化水平不斷提升,生產效率快速提高,可以毫不誇張地說,ICT技術已經成為行業發展的動力引擎。
Linux是信息世界最重要的基礎技術之一,也是雲計算的關鍵技術,掌握Linux這個工具對於進一步探索智能世界有著極為重要的作用和意義。丁老師的作品《Linux Shell核心編程指南》深入淺出地介紹了Linux Shell編程技術,通過許多精心設計的小遊戲把枯燥的技術變得生動有趣,大量的實戰案例讓讀者獲得真實的生產經驗,相信這本書無論是對於初學者還是對於繫統管理員和設計維護人員,都有極大的幫助。
信息技術和各行各業的結合僅僅是一個開始,未來幾十年的發展必然會更加精彩和激動人心,未來已來,快抓緊Linux這把鑰匙,踏上信息技術的高速列車,迎接未來的新時代吧!
陸海翔
華為雲教育行業解決方案總經理
推薦序5
在當下的智能數據時代,無論是出於對效率的提升,還是出於對大規模繫統的運維,自動化、智能化已是企業的必然選擇。Shell腳本也成為每一位工程師必備的技能之一。
這本書是作者繼《Linux運維之道》之後的又一力作,作者的著作我都詳細閱讀過,內容通俗易懂,實用性強,讓人受益匪淺。《Linux Shell核心編程指南》也不例外,本書從Shell腳本的編寫規範、基礎理論,再到對Shell腳本執行過程的深度剖析,由淺入深、層次清晰,讓讀者能夠知其因,曉其理;同時配備了大量適用於生產的實戰案例,可見作者心思縝密,為本書費盡心血。
很多人會說,學了Shell和Linux相關技術,不知道怎麼將其應用到企業中。那麼我想說,這是一本可以從中獲取答案的著作。初學者(新手)能從本書中繫統地學習與掌握如何規範編寫和使用Shell腳本,以及如何通過現有的知識點結合實戰案例舉一反三,應用到生產環境中,少走彎路。對於老司機們,本書繫統闡述了Shell的知識點與大量實戰案例,可以幫助你們獲取新的啟發與指導,讓你們更高效、更智能化、更自動化地完成自己的工作,這是一本難得的且值得經常翻閱的工具書。書中內容讀起來豐富精彩、層次有序、干貨十足,值得各個層次的工程師閱讀。
羅俊
亞馬遜(Amazon)雲架構師