女朋友要和我學習shell
看見女朋友三個字,我想都沒想,直接就啪,點進來了
也不管博主寫的啥,反正我看見這三個字就給個面子,進來親切的問候一句:您禮貌嗎?
女朋友像往常一樣洗好了澡,換上了睡衣,身上涂了些身體乳,噴了兩下香水,婀娜多姿的身材走到我面前,抓住我的脖領(lǐng),說了句,跟我進屋
由于我的身體已經(jīng)麻木了,也沒啥感覺,雙腳似機器人是的跟著就進去了,進去了之后我的眼睛盯著女朋友的水汪汪的大眼睛
她也深情的瞅著我,說了一句
船長,給我講講shell,今晚我就上你的船

假設我的女朋友叫小朝(跟我一起讀,之一奧zhao),別問我為什么要假設
shell的由來?
小朝你的家里有電腦吧,你也使用過吧,你知道電腦Windows、Linux、Mac OS等系統(tǒng)吧
小朝臉紅的點了點頭,你不是剛給我買的Mac嗎
... ...
這些電腦都是帶有圖形界面的,我們比較常用的Mac和Windows,對于大家用起來都很方便,大家都可以直接通過點擊一個軟件的圖標去運行一個軟件,可以直接右鍵刪除,可以一鍵啟動
然而在計算機的早起是沒有圖形界面的,那個時候操作電腦是通過一個個命令來控制計算機的,這些命令很多,分為很多類型,功能很強大

而這個時候的電腦也只有相對來說的專業(yè)人士才可以使用,因為不像現(xiàn)在這么人性化
點擊下方鏈接看西雅圖活電腦博物館
https://zhuanlan.zhihu.com/p/21895357
對于專業(yè)人士,需要一個命令啟動相應的程序,而現(xiàn)在我們可以直接使用操作圖標就可以啟動一個程序,換句話說,就是圖形界面和命令啟動的目的是一樣的,都是讓用戶控制計算機
而兩者的運行過程也是類似的,都是查找到程序在硬盤上的安裝位置,然后將這個加載到內(nèi)存中去運行
然而,真正能夠控制計算機硬件的只有操作系統(tǒng)內(nèi)核Kernel,而圖形界面和命令行都只是架設在用戶和內(nèi)核之間的一座橋梁而已
shell是什么?
由于操作系統(tǒng)內(nèi)核是很繁瑣的,普通用戶直接接觸內(nèi)核是危險的,也是沒必要的,于是就出現(xiàn)了一層代理,讓用戶可以直接操作系統(tǒng),就是上面說的圖形界面和命令行
這樣既能屏蔽其復雜性,又能夠保護計算機安全性,系統(tǒng)對命令進行簡單處理之后傳遞給內(nèi)核,這樣用戶和內(nèi)核之間就多了一層代理
在Linux系統(tǒng)下,這層代理的命令行程序就是shell

用一句大家都能聽懂的話叫:shell就是通過一些條件語句和循環(huán)語句,把一系列的Linux命令組合在一起,實現(xiàn)一些較為復雜的功能
這里如果熟悉linux命令的小伙伴應該瞬間就懂了,腦海里可能立刻就浮現(xiàn)出了各種cd、pwd、tail命令
shell除了能夠解釋用戶輸入的命令,將命令傳給內(nèi)核之外,還可以調(diào)用其它的程序,給其他程序傳遞參數(shù)并且獲取程序的處理結(jié)果
shell本身也是可以被其它程序調(diào)用
shell本身支持的命令不多,但是它是可以調(diào)用其它的程序,每個程序就是一個命令,shell命令的數(shù)量可以無限的擴展
因此shell的功能十分強大,可以對linux進行日常管理工作,以及日常的文本、字符串的操作,文件的創(chuàng)建查找,大規(guī)模的軟件的自動部署,監(jiān)控系統(tǒng)性能這些
shell怎么用?
shell是一種解釋性語言,就是將用戶的命令集合去解釋成計算機內(nèi)核能夠理解的語言
shell其實不是簡單的疊加命令,我們其實可以在shell中編程,對于熟悉Python的人來說,shell應該是最不陌生的了,其實和java、C++在編寫語法上也類似
雖然沒有這些語言這么強大,但是也支持了基本的編程語法,常見的邏輯判斷語句、循環(huán)語句、各種數(shù)據(jù)結(jié)構(gòu)、邏輯運算和數(shù)學運算等
還有內(nèi)置函數(shù)和用戶自定義函數(shù)



站在這個角度,shell也是屬于一種編程語言,它的解釋器就是shell這個程序,就類似于Python,有Python特定的解釋器
shell在工作中主要用于一些自動化的小工具,顧名思義,shell腳本,屬于一個輔助性程序,不是用來開發(fā)具有復雜業(yè)務邏輯的中大型軟件
編譯和解釋
任何代碼最終都要被“翻譯”成二進制的形式才能在計算機中執(zhí)行。
有的編程語言,如 C/C++、Pascal、Go語言、匯編等,必須在程序運行之前將所有代碼都翻譯成二進制形式,也就是生成可執(zhí)行文件,用戶拿到的是最終生成的可執(zhí)行文件,看不到源碼。
這個過程叫做編譯(Compile),這樣的編程語言叫做編譯型語言,完成編譯過程的軟件叫做編譯器(Compiler)。
而有的編程語言,如 Shell、JavaScript、Python、PHP等,需要一邊執(zhí)行一邊翻譯,不會生成任何可執(zhí)行文件,用戶必須拿到源碼才能運行程序。程序運行后會即時翻譯,翻譯完一部分執(zhí)行一部分,不用等到所有代碼都翻譯完。
這個過程叫做解釋,這樣的編程語言叫做解釋型語言或者腳本語言(Script),完成解釋過程的軟件叫做解釋器。
編譯型語言的優(yōu)點是執(zhí)行速度快、對硬件要求低、保密性好,適合開發(fā)操作系統(tǒng)、大型應用程序、數(shù)據(jù)庫等。
腳本語言的優(yōu)點是使用靈活、部署容易、跨平臺性好,非常適合Web開發(fā)以及小工具的制作。
Shell 就是一種腳本語言,我們編寫完源碼后不用編譯,直接運行源碼即可。
shell腳本實例
看一個shell的例子:連續(xù)輸入五個100以內(nèi)的數(shù)字,統(tǒng)計和、最小和最大
COUNT=1SUM=0MIN=0MAX=100while [ $COUNT -le 5 ]; doread -p "請輸入1-10個整數(shù):" INTif [[ ! $INT =~ ^[0-9]+$ ]]; thenecho "輸入必須是整數(shù)!"exit 1elif [[ $INT -gt 100 ]]; thenecho "輸入必須是100以內(nèi)!"exit 1fiSUM=$(($SUM+$INT))[ $MIN -lt $INT ] && MIN=$INT[ $MAX -gt $INT ] && MAX=$INTlet COUNT++doneecho "SUM: $SUM"echo "MIN: $MIN"echo "MAX: $MAX"
佛系求關(guān)注
船長希望有一天能夠靠寫作養(yǎng)活自己,現(xiàn)在還在磨練,這個時間可能會持續(xù)很久,但是,請看我漂亮的堅持
感謝大家能夠做我最初的讀者和傳播者,請大家相信,只要你給我一份愛,我終究會還你們一頁情的。
船長會持續(xù)更新技術(shù)文章,和生活中的暴躁文章,歡迎大家關(guān)注【Java賊船】,成為船長的學習小伙伴,和船長一起乘千里風、破萬里浪
哦對了,后續(xù)所有的遠程文章都會更新到這里
https://github.com/DayuMM2021/Java

