每一個(gè)程序員都應(yīng)該學(xué)點(diǎn)Shell腳本知識(shí)
什么是shell
shell是c語(yǔ)言編寫的程序,它在用戶和操作系統(tǒng)之間架起了一座橋梁,用戶可以通過(guò)這個(gè)橋梁訪問(wèn)操作系統(tǒng)內(nèi)核服務(wù)。
它既是一種命令語(yǔ)言,同時(shí)也是一種程序設(shè)計(jì)語(yǔ)言,你可以通過(guò)它來(lái)編寫程序。
shell 都能做什么
(1) 監(jiān)控系統(tǒng)運(yùn)行:linux可以說(shuō)是運(yùn)行最穩(wěn)定的操作系統(tǒng),這一方面得益于它完美的內(nèi)核,另一方面就是有很多shell腳本命令可以監(jiān)控系統(tǒng)的運(yùn)行,當(dāng)出現(xiàn)問(wèn)題之前,提前報(bào)警。
(2) 啟動(dòng)停止服務(wù):linux中的各種程序幾乎大部分都是通過(guò)服務(wù)來(lái)提供給用戶使用的,而shell腳本就可以控制服務(wù)的啟動(dòng)和停止,控制服務(wù)的重啟等。
(3) 備份導(dǎo)入數(shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)的資料是非常重要的,我們應(yīng)該經(jīng)常備份它們,這樣當(dāng)我們的數(shù)據(jù)或者設(shè)備出現(xiàn)問(wèn)題的時(shí)候,我們可以輕松地通過(guò)備份數(shù)據(jù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行還原。而shell腳本就可以進(jìn)行數(shù)據(jù)庫(kù)的備份和導(dǎo)入導(dǎo)出。
(4) 日志的記錄分析:平時(shí)我們的應(yīng)用程序會(huì)寫入很多日志,操作系統(tǒng)本身也會(huì)寫入很多日志,這個(gè)時(shí)候我們需要shell腳本對(duì)日志進(jìn)行分析,定時(shí)清理那些不需要的日志,這樣才能保證系統(tǒng)不會(huì)被日志文件填滿。
(5) 文件重命名:當(dāng)我們?cè)谝粋€(gè)文件夾中有大量的文件的時(shí)候,如果我們想要對(duì)它們進(jìn)行批量重命名的話,那么shell腳本就可以幫你做這件事,你只需要一個(gè)腳本,就可以批量修改文件的命名,當(dāng)然你可以批量修改圖片的尺寸。
(6) 環(huán)境配置:當(dāng)我們使用一個(gè)新環(huán)境的時(shí)候,我們往往需要進(jìn)行配置我們的環(huán)境,我們需要安裝相對(duì)應(yīng)的工具,需要配置環(huán)境變量,如果這些都是手動(dòng)配置就太麻煩了,使用shell腳本,我們既可以自動(dòng)化部署這些配置信息。
(7) 自動(dòng)化部署:對(duì)于運(yùn)營(yíng)人員來(lái)說(shuō),經(jīng)常需要操作的就是在多臺(tái)機(jī)器上配置環(huán)境,這個(gè)時(shí)候如果手動(dòng)去配置根本不現(xiàn)實(shí),這個(gè)時(shí)候shell腳本就可以幫助我們批量部署,自動(dòng)化部署我們的集群。
不同種類的shell
(1) Bourne shell
Bourne shell (sh) 由 AT&T 貝爾實(shí)驗(yàn)室的 Steve Bourne 編寫,是最初的 UNIX shell。由于其緊湊性和速度,它是 shell 編程的首選 shell。Bourne shell 的缺點(diǎn)是它缺乏交互式使用的功能,例如調(diào)用以前的命令(歷史)的能力。Bourne shell 也缺乏內(nèi)置的算術(shù)和邏輯表達(dá)式處理。
(2) C Shell
由加州大學(xué)伯克利分校的Bill Joy編寫的 UNIX 增強(qiáng)Shell,用于交互式使用的集成功能,例如別名和命令歷史記錄,內(nèi)置算術(shù)和類似C 的表達(dá)式語(yǔ)法。
(3) Bourne-Again Shell
與 Bourne shell 兼容的shell,結(jié)合了來(lái)自 Korn 和 C shell 的常用功能,具有命令調(diào)用和編輯自動(dòng)映射的箭頭按鍵。
(4) Korn Shell
David Korn 在貝爾實(shí)驗(yàn)室編寫出來(lái),它是Bourne shell的超集,它比c shell更快,兼容Bourne shell,它包含了算術(shù)函數(shù),字符串運(yùn)算等功能。
去哪里學(xué)習(xí)練習(xí)
linux和macos 都自帶了shell,你可以不需要安裝任何軟件就可以使用它們,對(duì)于windows用戶,現(xiàn)在有wsl,cgwin,mingw等很多環(huán)境可以供你學(xué)習(xí),當(dāng)然,你也可以使用docker來(lái)安裝一個(gè)精簡(jiǎn)linux,它同樣包含shell,你也可以使用它來(lái)學(xué)習(xí)。
還是那句話,學(xué)習(xí)編程的最佳方式就是不停地敲代碼,你只有不停地練習(xí),才能夠讓自己的技術(shù)變得更加精湛。學(xué)習(xí)shell也一樣,你也需要不停地編寫腳本來(lái)練習(xí),只有通過(guò)無(wú)數(shù)次練習(xí),你才能說(shuō)掌握它,否則你在你的簡(jiǎn)歷上只能寫上了解額不是精通。
總結(jié)
實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),我們學(xué)習(xí)任何編程語(yǔ)言,學(xué)習(xí)任何技能知識(shí),都是需要以實(shí)踐為前提。
我們需要通過(guò)實(shí)踐編寫那些常用的腳本,比如數(shù)據(jù)庫(kù)備份,資源報(bào)警,環(huán)境搭建等。通過(guò)這些實(shí)踐例子,我們才能夠更深刻地了解shell,才能在日常工作中將shell融會(huì)貫通。
shell能做的可不僅僅是文中列舉的這些工作,它能做得還很多,你需要自己不斷地去發(fā)現(xiàn),去認(rèn)知它。





























