Bash shell

什麼是 Shell?
咱們必需要透過『 Shell 』將咱們輸入的指令與 Kernel 溝通,好讓 Kernel 能夠控制硬件來正確無誤的工做!
                
                   圖1、硬件、核心與使用者的相關性圖示
                                
                    圖2、硬件、核心與使用者的相關性圖示
基本上,替咱們工做的是『硬件』,而控制硬件的是『核心』,再來,咱們使用者乃是利用『Shell』控制一些 kernel 提供的 『工具 (Utility)』來操控硬件替咱們正確的工做。
以字面上的意思來講, kernel 是『核心』的意思,而 Shell 是『殼』的意思!kernel 核心是操做系統的最底層的東西!這個核內心頭包括了各類的支持硬件的工具!若是你的硬件太新,而你的 kernel 並無支持的話,那麼你的 Shell 能力再怎麼強,也沒有辦法使硬件工做的!使計算機主機工做的正是核心的任務,可是操做核心來替使用者工做的,倒是 shell 喔!
狹隘的定義,通常來講,在 Linux 裏頭,所謂的 shell 就是指 BASH 這個文字模式的 shell 囉。可是,廣義的 shell 也能夠是 KDE 之類的圖形接口控制軟件呢! 由於他也能夠幫咱們與 kernel 進行溝通啊!
指令的下達:
[root@linux ~]# command [-options] parameter1 parameter2 ...
指令 選項 參數(1) 參數(2)
說明:
0. 一行指令中第一個輸入的絕對是『指令(command)』或『可執行檔案』
1. command 爲指令的名稱,例如變換路徑的指令爲 cd 等等;
2. 中刮號[]並不存在於實際的指令中,而加入參數設定時,一般爲 - 號,例如 -h;
有時候完整參數名稱會輸入 -- 符號,例如 --help;
3. parameter1 parameter2.. 爲依附在 option 後面的參數,
或者是 command 的參數;
4. command, -options, parameter1.. 這幾個咚咚中間以空格來區分,
不論空幾格 shell 都視爲一格;
5. 按下 [Enter] 按鍵後,該指令就當即執行。[Enter] 按鍵爲 <CR> 字符,
他表明着一行指令的開始啓動。
6. 指令太長的時候,可使用 \ 符號來跳脫 [Enter] 符號,
使指令連續到下一行。注意! \ 後就馬上接特殊字符。
7. 在 Linux 系統中,英文大小寫字母是不同的。舉例來講, cd 與 CD 並不一樣。
範例:
範例一:列出 /root 底下的各文件名稱
[root@linux ~]# ls -al /root
[root@linux ~]# ls -al /root
# 不論指令與參數中間空幾格,都是能夠接受的!linux

變量的設定:
範例一:設定一變量 name ,且內容爲 VBird 。
[root@linux ~]# 12name=VBird
-bash: 12name=VBird: command not found <==屏幕會顯示錯誤!由於不能以數字開頭!
[root@linux ~]# name = VBird <==仍是錯誤!由於有空白!
[root@linux ~]# name=VBird <==OK 的啦!
範例二:承上題,若變量內容爲 VBird's name 呢?
[root@linux ~]# name=VBird's name
# 由於單引號能夠將 Enter 這個特殊字符取消,因此,您能夠繼續在下一行輸入內容~
# 不過,這與咱們要達到的功能不一樣,因此,算是失敗的啦!
[root@linux ~]# name="VBird's name" <==OK 的啦!
[root@linux ~]# name=VBird\'s\ name
# 利用反斜線 (\) 跳脫特殊字符,例如單引號與空格鍵,這也是 OK 的啦!
範例三:我要在 PATH 這個變量當中『累加』:/home/dmtsai/bin 這個目錄
[root@linux ~]# PATH=$PATH:/home/dmtsai/bin
[root@linux ~]# PATH="$PATH":/home/dmtsai/bin
# 上面這兩種格式在 PATH 裏頭的設定都是 OK 的!可是底下的例子就不見得囉!
範例四:呈範例三,我要將 name 的內容多出 "yes" 呢?
[root@linux ~]# name=$nameyes
# 知道了吧?若是沒有雙引號,那麼變量成了啥?name 的內容是 $nameyes 這個變量!
# 呵呵!咱們可沒有設定過 nameyes 這個變量吶!因此,應該是底下這樣纔對!
[root@linux ~]# name="$name"yes
[root@linux ~]# name=${name}yes
範例五:如何讓我剛剛設定的 name=VBird 能夠用在下個 shell 的程序?
[root@linux ~]# name=VBird
[root@linux ~]# bash <==進入到所謂的子程序
[root@linux ~]# echo $name <==嘿嘿!並無剛剛設定的內容喔!
[root@linux ~]# exit <==離開剛剛的子程序
[root@linux ~]# export name
[root@linux ~]# bash <==進入到所謂的子程序
[root@linux ~]# echo $name <==出現了設定值了!
[root@linux ~]# exit <==離開剛剛的子程序
# 什麼是『子程序』呢?就是說,在我目前這個 shell 的狀況下,
# 去啓用另外一個新的 shell ,新的那個 shell 就是子程序啦!在通常的狀態下,
# 父程序的自訂變量是沒法在子程序內使用的。可是透過 export 將變量變成
# 環境變量後,就可以在子程序底下應用了!很不賴吧!至於程序的相關概念,
# 咱們會在『程序與資源管理』章節當中提到的喔!
範例六:如何進入到您目前核心的模塊目錄?
[root@linux ~]# cd /lib/modules/`uname -r`/kernel
# 每一個操做系統核心版本都不相同,以 FC4 爲例,他的預設核心版本是
# 2.6.11-1.1369_FC4 因此,他的模塊目錄在 /lib/modules/2.6.11-1.1369_FC4/kernel 。
# 由於每一個 distributions 的這個值都不相同,可是咱們卻能夠利用 uname -r 這個指令
# 先取得版本信息,因此囉,就能夠透過上面指令當中的內含指令 `uname -r`
# 先取得版本輸出到 cd .. 那個指令當中,就可以順利的進入目前核心的驅動程序所放置
# 的目錄囉!很方便吧!
範例七:取消剛剛設定的 name 這個變量內容
[root@linux ~]# unset nameshell

相關文章
相關標籤/搜索