站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        完全掌握Linux系統(tǒng)的Shell編程

        本篇文章給大家?guī)砹薼inux系統(tǒng)中shell編程的相關(guān)知識,在學(xué)習(xí)Shell編程之前,我們應(yīng)該要先知道什么是Shell,還有什么是shell腳本,希望對大家有幫助。

        完全掌握Linux系統(tǒng)的Shell編程

        一. 什么是Shell

        1. 在學(xué)習(xí)Shell編程之前,我們應(yīng)該要先知道什么是Shell

        用戶、Shell、Linux內(nèi)核、硬件的關(guān)系如下圖:

        完全掌握Linux系統(tǒng)的Shell編程

        Shell是一個應(yīng)用程序,也可以說是一個命令解釋器,它是用戶和Linux內(nèi)核之間的橋梁,可以將用戶在圖形界面上的操作或在終端輸入的命令傳遞給Linux內(nèi)核,然后Linux內(nèi)核再調(diào)度各個硬件及其他資源來完成用戶的操作。

        什么是Linux的內(nèi)核?在Linux操作系統(tǒng)中,真正能夠操作計算機(jī)硬件完成某個用戶功能的那一部分被稱為Linux系統(tǒng)的內(nèi)核。用戶在使用Linux系統(tǒng)時,是不可以直接操作內(nèi)核的,而是通過Shell來間接的操作內(nèi)核的。Shell不屬于內(nèi)核的一部分,而是在Linux內(nèi)核之外開發(fā)的應(yīng)用程序,它將接收到的用戶鼠標(biāo)點擊操作或輸入的命令傳遞給內(nèi)核,而內(nèi)核再去調(diào)度硬件去完成指定的操作。這樣用戶就不需要直接操作內(nèi)核,而是通過Shell間接地操作內(nèi)核,內(nèi)核也不會被直接的暴露于外部,保障了內(nèi)核的安全性,也簡化了用戶的操作。

        Shell這個應(yīng)用程序是開機(jī)即啟動的,我們在操作Linux系統(tǒng)時,無時不刻都在直接或者間接地通過Shell去操作Linux內(nèi)核。其實,在沒有圖形化界面之前,用戶是通過終端或者控制臺直接地去調(diào)用Shell這個應(yīng)用程序,然后通過輸入命令來操作Linux系統(tǒng)的。用戶在控制臺或者終端上看到的 $ 和 # 其實就是Shell的命令提示符,這表明用戶已經(jīng)進(jìn)入了Shell這個程序,只需要輸入命令,即可通過Shell來操作Linux內(nèi)核。只不過root用戶登錄顯示$,而普通用戶登錄顯示#。

        完全掌握Linux系統(tǒng)的Shell編程

        另外,Shell在將用戶的操作傳遞給內(nèi)核的過程,就是在調(diào)用內(nèi)核提供的API接口的過程。比如,用戶在圖形界面或者終端命令行做了一個打開文件的操作,而這個用戶的操作Shell接收到后,就會去調(diào)用內(nèi)核提供的相應(yīng)的函數(shù),然后內(nèi)核再去調(diào)度硬件資源來完成用戶的操作。

        2. 常見的Shell

        我們知道,Linux 是一個開源的操作系統(tǒng),它是由世界各地的多個組織機(jī)構(gòu)或個人共同開發(fā)完成的,每個組織機(jī)構(gòu)或個人負(fù)責(zé)一部分功能,最后組合在一起,就構(gòu)成了現(xiàn)在我們使用的 Linux。也正是這個原因,這些不同的組織機(jī)構(gòu)或者個人都會開發(fā)出可以在Linux系統(tǒng)中使用的應(yīng)用程序,而這些應(yīng)用程序的功能可能是類似的,各有優(yōu)缺點,至于使用哪一個由用戶選擇。而Shell就是這樣的一個應(yīng)用程序,所以Shell有很多個版本,目前Linux的大多數(shù)發(fā)行版默認(rèn)使用的Shell是 bash shell。其他常見的Shell版本如下:

        (1) sh:sh 的全稱是 Bourne shell,是 UNIX 上的標(biāo)準(zhǔn) shell,很多 UNIX 版本都配有 sh。sh 是第一個流行的 Shell。

        (2) csh:這個 shell 的語法有點類似C語言,所以才得名為 C shell ,簡稱為 csh。

        (3) tcsh:tcsh 是 csh 的增強(qiáng)版,加入了命令補(bǔ)全功能,提供了更加強(qiáng)大的語法支持。

        (4) ash:一個輕量級占用資源少的 Shell,適合運行于低內(nèi)存環(huán)境,與 bash shell 完全兼容。

        (5) bash:bash shell 由 GNU 組織開發(fā),保持了對 sh shell 的兼容性,是各種 Linux 發(fā)行版默認(rèn)配置的 shell。

        3. 查看Linux系統(tǒng)的Shell

        在Linux系統(tǒng)中,一般默認(rèn)使用的Shell是bash shell。Shell是一個應(yīng)用程序,一般都是放在/bin或者/user/bin目錄下,而當(dāng)前 Linux 系統(tǒng)可用的 Shell 都記錄在/etc/shells文件中。

        (1) 查看系統(tǒng)當(dāng)前可用的Shell,執(zhí)行命令【cat -n /etc/shells】:

        完全掌握Linux系統(tǒng)的Shell編程

        (2) 查看系統(tǒng)當(dāng)前默認(rèn)使用的shell,執(zhí)行命令【echo $SHELL】:

        完全掌握Linux系統(tǒng)的Shell編程

        (3) 查看各個用戶使用的Shell,執(zhí)行命令【cat -n /etc/passwd】:

        完全掌握Linux系統(tǒng)的Shell編程

        二. 什么是Shell編程

        1. 什么是Shell編程語言

        我們已經(jīng)知道,Shell是一個應(yīng)用程序,而這個應(yīng)用程序不單單只是可以將用戶的操作命令傳遞給Linux內(nèi)核,它也支持編程。Shell都會對應(yīng)一套編程語言的語法,而這套語言就被稱為Shell編程語言或是Shell腳本語言。Shell編程語言和JavaScript語言一樣是一種腳本語言,它不需要編譯,而它的解釋器就是Shell應(yīng)用程序本身。

        我們平時工作中所說的Shell,大多數(shù)情況指的是Shell腳本語言,而不是Shell應(yīng)用程序。

        2. 什么是Shell腳本

        我們在使用Shell腳本語言時,可以和Linux系統(tǒng)的其他操作命令結(jié)合使用(如 ls、grep等等),而我們使用Shell腳本語言和其他命令結(jié)合編寫能夠完成某個特定功能的擴(kuò)展名為.sh的文本,就叫做Shell腳本程序。

        3. 第一個Shell腳本

        我們已經(jīng)知道,Shell有很多個版本,而每個版本支持的Shell腳本語言語法可能是有差異的,而下面的關(guān)于Shell腳本的所有例子都是針對于Bash Shell這個版本而言。

        (1)在根目錄下新建一個Hello.sh腳本:【vim Hello.sh】

        (2)然后輸入以下內(nèi)容:

        #!/bin/bash      echo "Hello World "

        第一行:#! 是一個約定標(biāo)記,它可以告訴系統(tǒng)這個腳本要使用哪個Shell版本作為解釋器,后面緊跟的/bin/bash則是Shell的所在路徑,所以【#!/bin/bash 】表示聲明使用bin目錄下的 bash shell 作為這個腳本的解釋器;

        第二行:【echo "Hello World "】表示輸出文本 Hello World ??;

        (3)然后保存退出:【!wq】;

        (4)這樣,一個能夠輸出 Hello World !的腳本就編寫完成。

        補(bǔ)充說明:

        上面我們已經(jīng)說過,Shell程序就是Shell腳本語言的解釋器,而我們在使用終端時(例如通過Xshell連接Linux服務(wù)器的終端),其實就是已經(jīng)進(jìn)入了Shell這個程序,所以其實我們是可以在終端直接輸入Shell編程語言的代碼來運行的,而不需要寫在腳本里再去運行。例如,聲明一個變量并打印這個變量的值:

        (1)輸入代碼:【name=張三】,表示定義了一個變量name,它的值為張三;

        (2)輸入代碼:【echo $name】,表示打印變量name的值。

        完全掌握Linux系統(tǒng)的Shell編程

        當(dāng)然,這種方式只適合去執(zhí)行邏輯簡單只有一兩句代碼的情況,大多數(shù)情況下我們還是將Shell編程代碼寫在.sh腳本中再去執(zhí)行。

        4. 運行Shell腳本的方式

        上面我們已經(jīng)編寫了一個能夠輸出 Hello World !的Shell腳本運行,而現(xiàn)在我們就要執(zhí)行 Hello.sh 這個腳本。而Shell腳本的執(zhí)行方式有兩種:

        第一種:給予.sh文本可執(zhí)行權(quán)限,然后執(zhí)行文本:

        (1)先給予Shell腳本可執(zhí)行權(quán)限:【chmod +x Hello.sh】;

        (2)直接執(zhí)行:絕對路徑:【/Hello.sh】 或者 相對路徑:【./Hello.sh】

        完全掌握Linux系統(tǒng)的Shell編程

        注意,這里執(zhí)行時如果使用的是相對路徑,必須要以./開頭,表示當(dāng)前目錄,否則系統(tǒng)會找不到腳本,從而導(dǎo)致執(zhí)行失敗。

        第二種:將 Shell 腳本作為參數(shù)傳遞給 Bash Shell 解釋器:

        (1)這里使用Bash Shell來作為解釋器,那么我們直接調(diào)用Bash Shell 這個程序,然后把Hello.sh這個腳本作為參數(shù)傳給Shell即可:【/bin/bash Hello.sh】或 【bash Hello.sh】

        完全掌握Linux系統(tǒng)的Shell編程

        (2)這里需要注意,使用這種方式執(zhí)行Shell腳本時,在Shell腳本的第一行中就不需要聲明使用哪個版本的Shell來作為解釋器,也就是不需要這行代碼【#!/bin/bash】,因為我們運行腳本的命令中【/bin/bash Hello.sh】,就已經(jīng)指明了使用哪個版本的Shell作為解釋器。

        注意,這種方式執(zhí)行腳本文件時,如果使用的是相對路徑,那么【/bin/bash ./Hello.sh】和【/bin/bash Hello.sh】是一樣的,并無使用第一種執(zhí)行方式中的區(qū)別。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产精品亚洲不卡一区二区三区| 国内精品久久久久久久亚洲| www.日韩精品| 精品久久久久久国产潘金莲| 精品一区二区三区在线观看| 精品一区二区在线观看| 精品一区二区三区波多野结衣| 久久亚洲中文字幕精品一区四 | 久久精品一本到99热免费| 久久乐国产精品亚洲综合| 国产精品嫩草影院久久| 911亚洲精品不卡| 国产精品免费网站| 国产伦精品免编号公布| 亚洲精品无码不卡在线播放HE| 欧美日韩精品一区二区视频| 国内精品久久久久国产盗摄 | 完整观看高清秒播国内外精品资源 | 中文字幕av日韩精品一区二区| 久久97久久97精品免视看秋霞| 国产高清在线精品一区小说| 久久线看观看精品香蕉国产| 国产精品专区第二| 国内精品一级毛片免费看| 国产成人精品精品欧美| 99精品国产丝袜在线拍国语| 国产成人精品午夜福利| 精品人妻码一区二区三区| 精品人妻中文字幕有码在线| 国产成人精品白浆久久69| 99在线精品免费视频九九视| 国产精品视频色拍拍| 国产精品视频白浆免费视频| 992tv精品视频tv在线观看| 91麻豆精品国产| 久久精品九九亚洲精品天堂| 成人国产精品秘 果冻传媒在线| 国产高清在线精品一区二区| 黑巨人与欧美精品一区 | 国产在线国偷精品免费看| 精品无码三级在线观看视频|