shell初體驗
在Linux環境下工作,我們經常去打開一個Terminal終端,然後在終端下敲入shell命令和運行,如:
在終端下運行ls命令
我們也可以編寫一個簡單的腳本文件並運行它
shell腳本的編輯、修改權限和運行
愛好思考的同學可能就會有疑問了:
- 爲什麼我們在終端下敲入命令,就可以直接運行?
- 爲什麼我們在終端下可以直接運行一個腳本?
- 這個腳本是如何運行的?
- 在shell中的管道命令是如何實現的?
- shell到底是個什麼東西?
揭開shell神祕的面紗
在各種書籍和文檔資料中,我們經常會看到如下一張圖來描述shell和操作系統之間的關係
shell在Linux中的角色
shell相當於是一箇中介:介於用戶和操作系統之間。我們在Linux環境下想運行一個應用程序,一般有2種方法:
- 在圖形用戶界面下,點擊桌面圖標或菜單,啓動一個應用程序
- 在shell交互環境下,輸入一個shell命令或腳本文件,來啓動一個應用程序
那shell到底是什麼東東呢?我們打開一個虛擬Terminal終端,輸入 # ps -a
shell解釋器是一個bash進程
此時你會看到有一個叫做bash的進程,這個bash其實就是我們的shell,當我們在圖形模式下打開一個Terminal或者使用Ctrl+Alt+F3快捷鍵去登錄一個終端時,一般都會啓動一個shell解釋器,用來解釋和執行用戶輸入的命令,如ls命令。常見的shell解釋器有bash、sh、csh等,這些shell解釋器以一個用戶態進程的形式在運行,通過交互窗口,解析用戶輸入的shell命令,然後fork一個子進程去執行它。
除了解析和執行用戶的輸入命令外,shell解釋器還支持更多複雜的功能,如:腳本的執行、管道命令、輸入輸出重定向、前後臺執行、支持環境變量等。
從零實現一個shell解釋器
除了官方常用的bash、sh等shell解釋器,我們也可以自己實現一個shell解釋器!《Linux系統編程》視頻教程第06期:從零實現一個shell解釋器已發佈。在本期視頻教程中,將會帶領大家,從零開始,一步一步實現一個簡單的shell解釋器:wsh。主要實現了shell的如下功能:
- 實現了shell常用的內建命令:cd、exit
- 支持對信號的處理操作
- 支持命令的後臺運行
- 實現了shell的管道命令
- 支持腳本的解析和運行
- 實現了腳本語法if-else流程控制
- 支持shell環境變量及export命令
麻雀雖小五臟俱全,區區600+行代碼,我們就可以模仿實現shell的大部分基本功能,當然,跟實際的bash十萬餘行的代碼量相比,這還只是一個demo,等待你的繼續完善。但是通過自己從零開始,一步一步地實現,可以深刻理解shell命令運行時,底層的各種機制和細節,對我們理解Linux系統、熟悉掌握Linux系統編程有很大的幫助。目前課程已經發布到各大平臺,CSDN學員可以直接點擊CSDN學院視頻教程:視頻教程:從零實現一個shell解釋器
微信公衆號:宅學部落
QQ羣:475504428