2007年5月20日 星期日

[BASH] 打造自己的 shell 環境 (3) - Variable

Variable 簡介

這一篇主要介紹的是 variable,中文翻譯為變數! 而在 shell 中要如何定義 variable 呢? 可用以下語法:
# 等號(=)左右無空白
varname(變數名稱)=value(值)
而使用 variable 的方法,則是在 variable 名稱前面加上符號「$」即可。

以下舉個簡單的例子來說明直接下 command 來設定 variable 的使用與停用:(主要指令為「export」與「unset」)
# 設定 variable 的名稱與值
shell> myVar='this is a variable test'

# 將其設定為 environment variable
# 表示在此 login session 中,此 variable 都會有效
shell> export myVar

# 上面兩個指令也可以合併為一個!
shell> export myVar='this is a variable test'

# 輸出 variable 的內容
shell> echo $myVar

# 停用 variable
shell> unset myVar


引號的使用

使用 variable 的時候,有一項必須要注意的地方,即是引號(quote)的使用,單引號與雙引號呈現出來的效果並不相同;在單引號中的內容,即使裡面有 variable,也不會被轉換為對應的值;但若是在雙引號中則相反。

以下舉幾個例子來作個簡單說明:
single_quote_string='Four    spaces    between    these    words.'
double_quote_string="Four spaces between these words."

# 輸出「Four spaces between these words.」
echo $single_quote_string

# 輸出「Four spaces between these words.」
echo "$single_quote_string"

# 輸出「Four spaces between these words.」
echo $double_quote_string

# 輸出「Four spaces between these words.」
echo "$double_quote_string"
從 上面的例子看出端倪了嗎? 當 variable 沒有被雙引號包住時,shell 會將 variable 中的內容是為一個一個 word,並去掉 word 之間多餘的空白,僅留下一個空白;但若有此用雙引號,shell 會將其視為一個單一的 word,因此所有空白將會被保留住。


內建 variable

當然,shell 中一定有些內建的 variable,要辨識他們很容易,因為名稱通通都是大寫;而這些 variable 對於使用者來說都是有意義的,當然也有一些是必須具備高深的 Linux 基礎才可以瞭解的,而這邊不介紹很困難的,而是介紹幾個比較容易懂得內建 variable:
名稱
說明
範例
BASH
目前所使用的 shell 位置
/bin/bash
BASH_VERSION
bash 版本
3.1.17(1)-release
HISTCMD
目前命令所屬的 history 編號
822
HISTFILE
儲存 history 的檔案位置
/root/.bash_history
HISTFILESIZE
儲存 history 的最大數量
1000
PATH
用來尋找 command 的路徑列表
# 每個路徑用符號「:」隔開
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PS1
命令提示字元
# \u:使用者名稱
# \h:hostname
# \W:current working directory
[\u@\h \W]\$

其中要特別注意的 variable 的是「$PATH」,使用者可以自行加入指令所在的路徑,如此一來,執行該指令時就不需要輸入完整路徑了! 因為 shell 會自己根據 $PATH 中所設定的路徑去逐一搜尋並執行。

假設要加入額外的路徑(例如:/home/user/bin)至 $PATH 中,有以下兩種寫法:
# 較為安全的寫法
PATH=$PATH":/home/user/bin"

# 較不安全的作法
# 被入侵放惡意檔案的話,有可能造成系統損毀
# 因為 shell 會從 $PATH 前面的路經開始搜尋指令
PATH="home/user/bin:"$PATH
瞭解了嗎? 不同的設定方式也會有安全性上的考量喔!

沒有留言:

張貼留言