跟濤哥一起學嵌入式 19:從零實現一個shell解釋器

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章