2 shell命令解析器和環境變數

2021-10-08 12:43:31 字數 2139 閱讀 4932

shell是乙個命令解析器,是用來解析命令的,或者說它是乙個程式,它是我們和linux系統互動的一種工具,當我們在終端輸入一系列的字串時,shell會接收它們,並且再終端顯示出來,當按回車鍵的時候,此時shell就會解析這些字串,並且會去尋找和字串對應的程式,最後執行程式,那麼問題來了,要去**尋找呢?它會到乙個預設的路徑去尋找,那麼這個預設路徑又是由什麼所決定的呢?它是由環境變數所決定的。那麼問題又來了什麼又是環境變數呢?

path說簡單點就是乙個字串變數,當輸入命令的時候系統會去查詢path裡面記錄的路徑。比如在根目錄/下可以輸入命令ls,在/usr目錄下也可以輸入ls,但其實ls這個命令根本不在這個兩個目錄下,事實上當你輸入命令的時候linux會去/bin,/usr/bin,/sbin等目錄下面去找你此時輸入的命令,而path的值恰恰就是/bin:/sbin:/usr/bin:……。其中的冒號使目錄與目錄之間隔開。

補充說明:ps是用來報告程式執行狀況的指令,

-a  顯示所有終端機下執行的程式,除了階段作業領導者之外。

a  顯示現行終端機下的所有程式,包括其他使用者的程式。

-a  顯示所有程式。

如此處輸入pwd這個字串,按下回車後,那麼就會將pwd傳送給shell這個應用程式,然後shell就會去解析這個字串,並且會去path裡面記錄的路徑裡找對應的執行程式,這個執行程式也就是命令,到找到後,就執行這個程式或者說是命令。上面表示pwd是在bin目錄下的。

以在path中新增/home/book目錄為例:

2.1 永久設定之方法1,對所有使用者都有效:

修改/etc/environment,比如:sudo gedit /etc/environment,然後新增下行:

path=

"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/book"

然後重啟系統或重新登入。

2.2 永久設定之方法2,只對當前使用者有效:

修改~/.bashrc,在行尾新增或修改:

export path=

$path:/home/book

然後重啟系統或重新登入。

2.3 臨時設定:

在終端執行以下命令,這只對當前終端有效:

command not found的原因:

path所確定的目錄中無此程式

它不是可執行的程式

此處執行的結果顯然是原因1,那麼我們可以設定下環境變數,此時需要通過export命令來設定

export:設定或顯示環境變數。

語法:export [-fnp][變數名稱]=[變數設定值]

補充說明:在shell中執行程式時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程式使用。export的效力僅及於該此登陸操作。

參  數:

-f  代表[變數名稱]中為函式名稱。

-n  刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。

-p  列出所有的shell賦予程式的環境變數。

所以我們下面設定一下環境變數

上面我們說到在shell裡面輸入字串按下回車之後回到path指定的目錄查詢對應的程式,然後執行程式,其實這是片面的,我們可以在shell裡面用絕對路徑或者相對路徑指定要找的程式。同樣是上面乙個例子。

這裡並沒有去設定環境變數,但是也是達到了去設定環境變數的效果。

編寫簡單的shell命令解析器

編寫簡單的shell命令解析器 環境 redhat 9.0 核心 2.4.20 vi 文書編輯器 6.1.320 gcc 3.2.2 5 實現步驟 第0步 寫乙個最簡單的shell命令直譯器,本程式取自apue例1 5,命令不能帶引數。需要完成的內容如下 命令直譯器首先是乙個死迴圈。列印乙個命令提示...

Linux shell 命令解析器

都說shell是基本功,打好地基才能建立上層建築。覺得自己對shell的掌握還不夠,希望能經過積累對其越發熟悉,可以良好的運用。shell 命令解析器 將使用者輸入的指令轉化為機器可以執行的程式。開頭要寫 bin bash sh 用bash sh解析 在shell指令碼中 後面加注釋。檔案存為fil...

Mac OS操作相關(2) shell命令篇

本文目錄 本文簡介 在windows下,有cmd供我們編寫命令列,執行一些基本功能 在linux下,有terminater終端供我們編寫命令列,操作一些任務 同樣的,在mac下也提供這樣的乙個命令列執行平台,它也叫做terminater終端 unix shell 讓我們來學習下mac下的termin...