国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

Linux系統(tǒng)中Shell編程的示例解析

2024-08-27 23:55:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  這篇文章主要介紹Linux系統(tǒng)中Shell編程的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
 
  一. 什么是Shell
         1. 在學(xué)習(xí)Shell編程之前,我們應(yīng)該要先知道什么是Shell
  用戶、Shell、Linux內(nèi)核、硬件的關(guān)系如下圖:
 
  Linux系統(tǒng)中Shell編程的示例分析
 
  Shell是一個(gè)應(yīng)用程序,也可以說(shuō)是一個(gè)命令解釋器,它是用戶和Linux內(nèi)核之間的橋梁,可以將用戶在圖形界面上的操作或在終端輸入的命令傳遞給Linux內(nèi)核,然后Linux內(nèi)核再調(diào)度各個(gè)硬件及其他資源來(lái)完成用戶的操作。
 
  什么是Linux的內(nèi)核?在Linux操作系統(tǒng)中,真正能夠操作計(jì)算機(jī)硬件完成某個(gè)用戶功能的那一部分被稱為L(zhǎng)inux系統(tǒng)的內(nèi)核。用戶在使用Linux系統(tǒng)時(shí),是不可以直接操作內(nèi)核的,而是通過(guò)Shell來(lái)間接的操作內(nèi)核的。Shell不屬于內(nèi)核的一部分,而是在Linux內(nèi)核之外開(kāi)發(fā)的應(yīng)用程序,它將接收到的用戶鼠標(biāo)點(diǎn)擊操作或輸入的命令傳遞給內(nèi)核,而內(nèi)核再去調(diào)度硬件去完成指定的操作。這樣用戶就不需要直接操作內(nèi)核,而是通過(guò)Shell間接地操作內(nèi)核,內(nèi)核也不會(huì)被直接的暴露于外部,保障了內(nèi)核的安全性,也簡(jiǎn)化了用戶的操作。
 
  Shell這個(gè)應(yīng)用程序是開(kāi)機(jī)即啟動(dòng)的,我們?cè)诓僮鱈inux系統(tǒng)時(shí),無(wú)時(shí)不刻都在直接或者間接地通過(guò)Shell去操作Linux內(nèi)核。其實(shí),在沒(méi)有圖形化界面之前,用戶是通過(guò)終端或者控制臺(tái)直接地去調(diào)用Shell這個(gè)應(yīng)用程序,然后通過(guò)輸入命令來(lái)操作Linux系統(tǒng)的。用戶在控制臺(tái)或者終端上看到的 $ 和 # 其實(shí)就是Shell的命令提示符,這表明用戶已經(jīng)進(jìn)入了Shell這個(gè)程序,只需要輸入命令,即可通過(guò)Shell來(lái)操作Linux內(nèi)核。只不過(guò)root用戶登錄顯示$,而普通用戶登錄顯示#。
 
  Linux系統(tǒng)中Shell編程的示例分析
 
  另外,Shell在將用戶的操作傳遞給內(nèi)核的過(guò)程,就是在調(diào)用內(nèi)核提供的API接口的過(guò)程。比如,用戶在圖形界面或者終端命令行做了一個(gè)打開(kāi)文件的操作,而這個(gè)用戶的操作Shell接收到后,就會(huì)去調(diào)用內(nèi)核提供的相應(yīng)的函數(shù),然后內(nèi)核再去調(diào)度硬件資源來(lái)完成用戶的操作。
 
         2. 常見(jiàn)的Shell
  我們知道,Linux 是一個(gè)開(kāi)源的操作系統(tǒng),它是由世界各地的多個(gè)組織機(jī)構(gòu)或個(gè)人共同開(kāi)發(fā)完成的,每個(gè)組織機(jī)構(gòu)或個(gè)人負(fù)責(zé)一部分功能,最后組合在一起,就構(gòu)成了現(xiàn)在我們使用的 Linux。也正是這個(gè)原因,這些不同的組織機(jī)構(gòu)或者個(gè)人都會(huì)開(kāi)發(fā)出可以在Linux系統(tǒng)中使用的應(yīng)用程序,而這些應(yīng)用程序的功能可能是類似的,各有優(yōu)缺點(diǎn),至于使用哪一個(gè)由用戶選擇。而Shell就是這樣的一個(gè)應(yīng)用程序,所以Shell有很多個(gè)版本,目前Linux的大多數(shù)發(fā)行版默認(rèn)使用的Shell是 bash shell。其他常見(jiàn)的Shell版本如下:
 
  (1) sh:sh 的全稱是 Bourne shell,是 UNIX 上的標(biāo)準(zhǔn) shell,很多 UNIX 版本都配有 sh。sh 是第一個(gè)流行的 Shell。
 
  (2) csh:這個(gè) shell 的語(yǔ)法有點(diǎn)類似C語(yǔ)言,所以才得名為 C shell ,簡(jiǎn)稱為 csh。
 
  (3) tcsh:tcsh 是 csh 的增強(qiáng)版,加入了命令補(bǔ)全功能,提供了更加強(qiáng)大的語(yǔ)法支持。
 
         3. 查看Linux系統(tǒng)的Shell
  在Linux系統(tǒng)中,一般默認(rèn)使用的Shell是bash shell。Shell是一個(gè)應(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) 查看各個(gè)用戶使用的Shell,執(zhí)行命令【cat -n /etc/passwd】:
 
  Linux系統(tǒng)中Shell編程的示例分析
 
  二. 什么是Shell編程
         1. 什么是Shell編程語(yǔ)言
  我們已經(jīng)知道,Shell是一個(gè)應(yīng)用程序,而這個(gè)應(yīng)用程序不單單只是可以將用戶的操作命令傳遞給Linux內(nèi)核,它也支持編程。Shell都會(huì)對(duì)應(yīng)一套編程語(yǔ)言的語(yǔ)法,而這套語(yǔ)言就被稱為Shell編程語(yǔ)言或是Shell腳本語(yǔ)言。Shell編程語(yǔ)言和JavaScript語(yǔ)言一樣是一種腳本語(yǔ)言,它不需要編譯,而它的解釋器就是Shell應(yīng)用程序本身。
 
  我們平時(shí)工作中所說(shuō)的Shell,大多數(shù)情況指的是Shell腳本語(yǔ)言,而不是Shell應(yīng)用程序。
 
  2. 什么是Shell腳本
  我們?cè)谑褂肧hell腳本語(yǔ)言時(shí),可以和Linux系統(tǒng)的其他操作命令結(jié)合使用(如 ls、grep等等),而我們使用Shell腳本語(yǔ)言和其他命令結(jié)合編寫(xiě)能夠完成某個(gè)特定功能的擴(kuò)展名為.sh的文本,就叫做Shell腳本程序。
 
         3. 第一個(gè)Shell腳本
  我們已經(jīng)知道,Shell有很多個(gè)版本,而每個(gè)版本支持的Shell腳本語(yǔ)言語(yǔ)法可能是有差異的,而下面的關(guān)于Shell腳本的所有例子都是針對(duì)于Bash Shell這個(gè)版本而言。
 
 ?。?)在根目錄下新建一個(gè)Hello.sh腳本:【vim Hello.sh】
 
  (2)然后輸入以下內(nèi)容:
 
  #!/bin/bash     
  echo "Hello World "
  第一行:#! 是一個(gè)約定標(biāo)記,它可以告訴系統(tǒng)這個(gè)腳本要使用哪個(gè)Shell版本作為解釋器,后面緊跟的/bin/bash則是Shell的所在路徑,所以【#!/bin/bash 】表示聲明使用bin目錄下的 bash shell 作為這個(gè)腳本的解釋器;
 
  第二行:【echo "Hello World "】表示輸出文本 Hello World ??;
 
  (3)然后保存退出:【!wq】;
 
  (4)這樣,一個(gè)能夠輸出 Hello World !的腳本就編寫(xiě)完成。
 
  補(bǔ)充說(shuō)明:
 
        上面我們已經(jīng)說(shuō)過(guò),Shell程序就是Shell腳本語(yǔ)言的解釋器,而我們?cè)谑褂媒K端時(shí)(例如通過(guò)Xshell連接Linux服務(wù)器的終端),其實(shí)就是已經(jīng)進(jìn)入了Shell這個(gè)程序,所以其實(shí)我們是可以在終端直接輸入Shell編程語(yǔ)言的代碼來(lái)運(yùn)行的,而不需要寫(xiě)在腳本里再去運(yùn)行。例如,聲明一個(gè)變量并打印這個(gè)變量的值:
 
 ?。?)輸入代碼:【name=張三】,表示定義了一個(gè)變量name,它的值為張三;
 
 ?。?)輸入代碼:【echo $name】,表示打印變量name的值。
 
  Linux系統(tǒng)中Shell編程的示例分析
 
  當(dāng)然,這種方式只適合去執(zhí)行邏輯簡(jiǎn)單只有一兩句代碼的情況,大多數(shù)情況下我們還是將Shell編程代碼寫(xiě)在.sh腳本中再去執(zhí)行。
 
 
          第二種:將 Shell 腳本作為參數(shù)傳遞給 Bash Shell 解釋器:
 
 ?。?)這里使用Bash Shell來(lái)作為解釋器,那么我們直接調(diào)用Bash Shell 這個(gè)程序,然后把Hello.sh這個(gè)腳本作為參數(shù)傳給Shell即可:【/bin/bash Hello.sh】或 【bash Hello.sh】
 
  Linux系統(tǒng)中Shell編程的示例分析
 
 ?。?)這里需要注意,使用這種方式執(zhí)行Shell腳本時(shí),在Shell腳本的第一行中就不需要聲明使用哪個(gè)版本的Shell來(lái)作為解釋器,也就是不需要這行代碼【#!/bin/bash】,因?yàn)槲覀冞\(yùn)行腳本的命令中【/bin/bash Hello.sh】,就已經(jīng)指明了使用哪個(gè)版本的Shell作為解釋器。
 
  注意,這種方式執(zhí)行腳本文件時(shí),如果使用的是相對(duì)路徑,那么【/bin/bash ./Hello.sh】和【/bin/bash Hello.sh】是一樣的,并無(wú)使用第一種執(zhí)行方式中的區(qū)別。

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 疏附县| 射阳县| 赤峰市| 息烽县| 塘沽区| 满洲里市| 景洪市| 通渭县| 资中县| 炉霍县| 石台县| 砀山县| 乐亭县| 怀宁县| 玉山县| 天门市| 麻阳| 犍为县| 榆中县| 元氏县| 潼关县| 珠海市| 台中市| 定边县| 左贡县| 望奎县| 鄂温| 雷波县| 洪泽县| 荥经县| 邯郸市| 锡林郭勒盟| 广饶县| 仪征市| 盐亭县| 桦甸市| 五家渠市| 遵义县| 磐安县| 神池县| 禹城市|