共計 3397 個字符,預計需要花費 9 分鐘才能閱讀完成。
這篇文章主要介紹 Linux 系統中 Shell 編程的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一. 什么是 Shell 1. 在學習 Shell 編程之前,我們應該要先知道什么是 Shell
用戶、Shell、Linux 內核、硬件的關系如下圖:
Shell 是一個應用程序,也可以說是一個命令解釋器,它是用戶和 Linux 內核之間的橋梁,可以將用戶在圖形界面上的操作或在終端輸入的命令傳遞給 Linux 內核,然后 Linux 內核再調度各個硬件及其他資源來完成用戶的操作。
什么是 Linux 的內核?在 Linux 操作系統中,真正能夠操作計算機硬件完成某個用戶功能的那一部分被稱為 Linux 系統的內核。用戶在使用 Linux 系統時,是不可以直接操作內核的,而是通過 Shell 來間接的操作內核的。Shell 不屬于內核的一部分,而是在 Linux 內核之外開發的應用程序,它將接收到的用戶鼠標點擊操作或輸入的命令傳遞給內核,而內核再去調度硬件去完成指定的操作。這樣用戶就不需要直接操作內核,而是通過 Shell 間接地操作內核,內核也不會被直接的暴露于外部,保障了內核的安全性,也簡化了用戶的操作。
Shell 這個應用程序是開機即啟動的,我們在操作 Linux 系統時,無時不刻都在直接或者間接地通過 Shell 去操作 Linux 內核。其實,在沒有圖形化界面之前,用戶是通過終端或者控制臺直接地去調用 Shell 這個應用程序,然后通過輸入命令來操作 Linux 系統的。用戶在控制臺或者終端上看到的 $ 和 # 其實就是 Shell 的命令提示符,這表明用戶已經進入了 Shell 這個程序,只需要輸入命令,即可通過 Shell 來操作 Linux 內核。只不過 root 用戶登錄顯示 $,而普通用戶登錄顯示 #。
另外,Shell 在將用戶的操作傳遞給內核的過程,就是在調用內核提供的 API 接口的過程。比如,用戶在圖形界面或者終端命令行做了一個打開文件的操作,而這個用戶的操作 Shell 接收到后,就會去調用內核提供的相應的函數,然后內核再去調度硬件資源來完成用戶的操作。
2. 常見的 Shell
我們知道,Linux 是一個開源的操作系統,它是由世界各地的多個組織機構或個人共同開發完成的,每個組織機構或個人負責一部分功能,最后組合在一起,就構成了現在我們使用的 Linux。也正是這個原因,這些不同的組織機構或者個人都會開發出可以在 Linux 系統中使用的應用程序,而這些應用程序的功能可能是類似的,各有優缺點,至于使用哪一個由用戶選擇。而 Shell 就是這樣的一個應用程序,所以 Shell 有很多個版本,目前 Linux 的大多數發行版默認使用的 Shell 是 bash shell。其他常見的 Shell 版本如下:
(1) sh:sh 的全稱是 Bourne shell,是 UNIX 上的標準 shell,很多 UNIX 版本都配有 sh。sh 是第一個流行的 Shell。
(2) csh:這個 shell 的語法有點類似 C 語言,所以才得名為 C shell,簡稱為 csh。
(3) tcsh:tcsh 是 csh 的增強版,加入了命令補全功能,提供了更加強大的語法支持。
(4) ash:一個輕量級占用資源少的 Shell,適合運行于低內存環境,與 bash shell 完全兼容。
(5) bash:bash shell 由 GNU 組織開發,保持了對 sh shell 的兼容性,是各種 Linux 發行版默認配置的 shell。
3. 查看 Linux 系統的 Shell
在 Linux 系統中,一般默認使用的 Shell 是 bash shell。Shell 是一個應用程序,一般都是放在 /bin 或者 /user/bin 目錄下,而當前 Linux 系統可用的 Shell 都記錄在 /etc/shells 文件中。
(1) 查看系統當前可用的 Shell,執行命令【cat -n /etc/shells】:
(2) 查看系統當前默認使用的 shell,執行命令【echo $SHELL】:
(3) 查看各個用戶使用的 Shell,執行命令【cat -n /etc/passwd】:
二. 什么是 Shell 編程 1. 什么是 Shell 編程語言
我們已經知道,Shell 是一個應用程序,而這個應用程序不單單只是可以將用戶的操作命令傳遞給 Linux 內核,它也支持編程。Shell 都會對應一套編程語言的語法,而這套語言就被稱為 Shell 編程語言或是 Shell 腳本語言。Shell 編程語言和 JavaScript 語言一樣是一種腳本語言,它不需要編譯,而它的解釋器就是 Shell 應用程序本身。
我們平時工作中所說的 Shell,大多數情況指的是 Shell 腳本語言,而不是 Shell 應用程序。
2. 什么是 Shell 腳本
我們在使用 Shell 腳本語言時,可以和 Linux 系統的其他操作命令結合使用 (如 ls、grep 等等),而我們使用 Shell 腳本語言和其他命令結合編寫能夠完成某個特定功能的擴展名為.sh 的文本,就叫做 Shell 腳本程序。
3. 第一個 Shell 腳本
我們已經知道,Shell 有很多個版本,而每個版本支持的 Shell 腳本語言語法可能是有差異的,而下面的關于 Shell 腳本的所有例子都是針對于 Bash Shell 這個版本而言。
(1)在根目錄下新建一個 Hello.sh 腳本:【vim Hello.sh】
(2)然后輸入以下內容:
#!/bin/bash
echo Hello World
第一行:#! 是一個約定標記,它可以告訴系統這個腳本要使用哪個 Shell 版本作為解釋器,后面緊跟的 /bin/bash 則是 Shell 的所在路徑,所以【#!/bin/bash】表示聲明使用 bin 目錄下的 bash shell 作為這個腳本的解釋器;
第二行:【echo Hello World】表示輸出文本 Hello World!;
(3)然后保存退出:【!wq】;
(4)這樣,一個能夠輸出 Hello World!的腳本就編寫完成。
補充說明:
上面我們已經說過,Shell 程序就是 Shell 腳本語言的解釋器,而我們在使用終端時(例如通過 Xshell 連接 Linux 服務器的終端),其實就是已經進入了 Shell 這個程序,所以其實我們是可以在終端直接輸入 Shell 編程語言的代碼來運行的,而不需要寫在腳本里再去運行。例如,聲明一個變量并打印這個變量的值:
(1)輸入代碼:【name= 張三】,表示定義了一個變量 name,它的值為張三;
(2)輸入代碼:【echo $name】,表示打印變量 name 的值。
當然,這種方式只適合去執行邏輯簡單只有一兩句代碼的情況,大多數情況下我們還是將 Shell 編程代碼寫在.sh 腳本中再去執行。
4. 運行 Shell 腳本的方式
上面我們已經編寫了一個能夠輸出 Hello World!的 Shell 腳本運行,而現在我們就要執行 Hello.sh 這個腳本。而 Shell 腳本的執行方式有兩種:
第一種:給予.sh 文本可執行權限,然后執行文本:
(1)先給予 Shell 腳本可執行權限:【chmod +x Hello.sh】;
(2)直接執行:絕對路徑:【/Hello.sh】或者 相對路徑:【./Hello.sh】
注意,這里執行時如果使用的是相對路徑,必須要以./ 開頭,表示當前目錄,否則系統會找不到腳本,從而導致執行失敗。
第二種:將 Shell 腳本作為參數傳遞給 Bash Shell 解釋器:
(1)這里使用 Bash Shell 來作為解釋器,那么我們直接調用 Bash Shell 這個程序,然后把 Hello.sh 這個腳本作為參數傳給 Shell 即可:【/bin/bash Hello.sh】或【bash Hello.sh】
(2)這里需要注意,使用這種方式執行 Shell 腳本時,在 Shell 腳本的第一行中就不需要聲明使用哪個版本的 Shell 來作為解釋器,也就是不需要這行代碼【#!/bin/bash】,因為我們運行腳本的命令中【/bin/bash Hello.sh】,就已經指明了使用哪個版本的 Shell 作為解釋器。
注意,這種方式執行腳本文件時,如果使用的是相對路徑,那么【/bin/bash ./Hello.sh】和【/bin/bash Hello.sh】是一樣的,并無使用第一種執行方式中的區別。
以上是“Linux 系統中 Shell 編程的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!