2012年3月8日

bash shell script兩三事 (2)

bash shell變數就是
varName=value
如果沒有特別指出,一律default為string,也就是說
varNum=1這裡會變成字串1而非數字1
提取的變數value的方式有兩種
$varName跟${varName}
字串建議使用" "或者' '包起來,兩者不一樣是前者會做變數替換,後者不會,比方說
varName="jacky"
str1="Hi! $varName"
str2='Hi! $varName'
其中str1會顯示Hi! jacky!,而str2則保持原來的樣子
printf則是類似C的使用方式,不一樣的是,printf會幫字串中特殊字元加上跳脫符號(\)
shopt -s -o nounset
表示必須在使用前必須有assign value的動作,可以避免寫錯變數
unset varName
則可以刪除變數,而
varName=
則可以刪除環境變數

變數可以輸出為環境變數,只用
export varName
其中有兩個特別的環境變數為LOGNAMEUSER,LOGNAME指的是登入時後的名稱,USER是只現在身分的名稱,假如你已jacky這個一般ID登入,然後使用su變成super user,這時候LOGNAME為jakcy,USER為root。因為LOGNAME的關係,你所使用的PATH還是jacky的,並不包含/sbin下的指令,所以在使用一些指令的時候會遭遇command not found的問題,只要用
su -
加上一個減號,就可以讓LOGNAME也改成root了

一些特殊的變數
$1~$9,表示shell command後面的參數,如果超過第十個開始要使用${10}這樣的形式
$*表示所有參數所形成的字串
$@表示將參數以振烈表示
$#表示參數的個數
$$表示執行該shell command的PID

readonly可以用來宣告唯讀變數
readonly varName
readonly -a arrayName
第一個宣告一變數為唯讀,第二個宣告唯讀陣列

decleare指令可以調整以及顯示變數的屬性
變成唯讀
declare -r varName
宣告陣列
declare -a varName
宣告為整數型態
declare -i varName
宣告為環境變數
declare -x PATH
顯示函數及其屬性
declare -F
顯示變數屬性
declare -p varName


幾個重要的檔案
使用者個人設定
~/.bash_profile,登入時候執行的shell script
~/.bashrc,執行一個新的shell script之前執行
~/.bash_logout,登出的時候執行
系統管理者維護設定
/etc/profile,一些預設的設定,對全體user有效,通常有umask、PATH、LC_*等等設定
/etc/bash.bashrc,一份全域性的profile
/etc/skel下的檔案,使用者帳號建立的時候依照這裡組裝出.bash_profile與.bashrc

沒有留言: