2007年6月24日

鳥哥筆記-Lesson 7

shell首部曲,shell在linux中扮演重要的一環的程式,他是透過ls等等的指令集合跟kernel溝通,kernel在透過硬體去擷取必要的資訊,比方說ls,你給shell ls指令之後,他便會去呼叫kernel的一些function call,然後取得有關inode等等的資訊,那麼kernel如何知道硬碟上面inode等等的分佈狀況呢?當然就是透過一些驅動程式來達成囉

所以shell就是人們跟kernel之間的溝通橋樑

因為shell提供了很多的功能,他也就非常複雜,另外就是,很多人喜歡發展自己喜歡的shell,例如c shell就是熟悉c程式語言的人發展出來的,不過目前最風行的叫做bash shell

  • shell的功能有哪些呢?
  • 執行指令
  • 指令的補全(延長全人類生命)
  • alias(重新定義指令)
  • 控制process(程式)
  • shell scripts(一些方便的程式,如批次處理或者定時處理事項)

當我們打開一個terminal的時候,就會執行一個shell,他提供了許多指令,但shell並不是提供所有的有用程式(也就是說,有一部分事由其他程式呼叫來使用的使用),我們可以用type command來得知,例如說,如果打入type cd,他會告訴你這是一個shell內建的指令,但是type telinit,他會顯示出路徑,表示這並非一個內建的指令,如果他是alias(別名)他則會列出alias的指令

Shell的變數,是一串取代某個特殊符號的名稱,比方說,我們用$HOME取代原本的/home/your_name這樣的字串,這也啥好處呢?原本要打入cd /home/your_name才可以回到家目錄,就變成打入cd $HOME就可以了,這可以方便管理跟縮短我們打字的時間

那如何設定自己的變數呢,直接使用=就可以了,例如,myname="crazy_duke";一般如果沒有空白,可以直接打就好myname=crazy_duke,如果有空白,就加上雙引號;接著觀察可以使用echo $myname

`(quoter),一般位於鍵盤上面橫的數字鍵1旁邊,被他包圍的字串,會被視為指令,然後執行後回傳的結果在當作字串,例如cd /lib/modules/`uname -r`/kernel

set指令則可以列出所有的變數,env指令可以列出所有目前的環境變數,有幾個常用的shell環境變數
  • HOME:家目錄
  • SHELL:目前使用的Shell的名稱,如bash
  • PATH:可執行程式的目錄集合
  • LANG:使用的語言,如zh_TW.UTF-8
  • XMODIFIERS:一般是輸入法,如@im=SCIM
環境變數是shell在執行子程序(child process)的時候留下的變數,其他你設定的變數將會消失,這實在意味著某種不方便,比方說,一些你自己設定好的路徑都將消失,你要用到這些變數將是一個十分痛苦的事情;所以有個功能叫做export,可以export variable,就可以繼續在child process裡面使用

晚一點在談談array的宣告跟一些常用的指令,shell真是博大精深阿

沒有留言: