標籤:io os 使用 ar strong 檔案 sp div on
預設情況下,Bash shell是一種無類型的腳步語言,除非用declare特別聲明,否則它不會區分一個變數是整數變數、浮點數變數還是字串變數。在Bash shell中所有的變數都被看成是字串,使用時也不需要進行聲明。
1、變數的命名
bash shell中變數的命名規則和C語言相同,必須是由英文字母、數字及底線組成,第一個字元必須是字母或底線,變數的長度沒有限制,但英文字母區分大小寫。雖然,bash shell中使用變數時不需要聲明,但還是提倡對一些重要的變數進行聲明、添加註釋,以便閱讀和維護。聲明或建立一個變數之後,它的範圍是當前shell,子shell無法擷取父shell中定義的變數,除非該變數時環境變數。
2、設定變數
在bash shell中要設定某個變數的值是很容易的,只需要按照:
變數名稱=值
的方式即可改變某個變數的值,需要注意的是等號的兩邊是不能有空格的,若值中含有空格的話,需要用引號括起來。
3、擷取變數值
要擷取某個變數的值只需要在該變數的名稱前面加上$或用${}將變數括起來即可。
# echo $PATH
# echo ${PATH}
4、取消與清空變數
當你不再需要某個變數時,你可能想取消該變數,即將該變數從當前名字空間中刪除並釋放該變數所佔用的記憶體。在bash shell中可以用unset命令來取消某個變數。用法如下:
unset 變數名稱 或 unset -v 變數名稱
-v表示取消變數,unset除了可以用來取消變數外,還可以用來取消函數,用unset來取消函數時,用法如下:
unset -f 函數名稱
使用unset以後,變數就不複存在了,這可能並不是你想要的,你可能只是想將清除該變數中的值,使其為null,即清空變數,清空變數的操作如下:
變數名稱=
5、環境變數
只有當一個變數成為環境變數時,它才能為子shell所用,為了使一個變數成為環境變數,需要使用export命令,具體如下:
變數名稱="xxxx"
export 變數名稱
或
export 變數名稱="xxxx"
除了使用export之後,還可以在聲明的時候就將變數指定為環境變數,如下:
declare -x 變數名稱
6、bash的內建變數
除了環境變數和使用者自訂的變數之外,bash shell中還會用到很多的內建變數,下面介紹一些常用的內建變數。
BASH -- bash的完整路徑,通常是/bin/bash
BASH_VERSION -- bash的版本
BASH_ENV -- 在非互動模式下,會先檢查$BASH_ENV是否有指定的開機檔案,如果有則先執行它
ENV -- 與BASH_ENV類似,不過是在POSIX模式下,會先檢查$ENV是否有指定的開機檔案,如果有則先執行它
CDPATH -- cd命令的搜尋路徑
PATH -- 命令的搜尋路徑
EUID -- 有效使用者id
FUNCNAME -- 在函數執行期間,即為函數的自身的名稱
HOSTNAME -- 主機名稱
HOSTTYPE -- 主控件類型,如i386
OSTYPE -- 執行bash的作業系統類型,如linux-gnu
HOME -- 使用者主目錄
IFS -- 預設的欄位分隔符號
OPTARG -- 使用getopts處理選項時,取得的選項的參數
OPTIND -- 使用getopts處理選項時,選項的索引值
OPTERR -- 若將OPTERR設定為1,則getopts發生錯誤,輸出錯誤資訊
$1~$n -- 位置參數,即傳入程式或函數的參數,$1即第一個參數,$2為第二個參數,其他類推
$* -- 所有的位置參數,並將其看成一個字串,如”test.sh abc 123“,則$*為”abc 123“
[email protected] -- 所有的位置參數,並將其看成一個字串數組,如”test.sh abc 123“,則$*為”abc 123“
$# -- 位置參數的個數
$? -- 上一條命令執行結束後的傳回值
$$ -- 當前bash shell的進程號
$! -- 上一個背景程式的進程號
7、調整變數的屬性
declare命令不僅可以用來聲明變數,還可以用來調整變數的屬性,具體用法如下:
-p 顯示變數的屬性
-a 變數是一個數組
-i 變數是一個整數
-r 變數為唯讀
-x 變數為環境變數
shell變數與字串操作