1. 程式人生 > >1.Linux Shell中的變量

1.Linux Shell中的變量

proc shell parameter 顯式 nbsp 位置 login shell中的 自己

1. Shell變量類型

Shell是一種動態類型語言(不使用顯式的數據聲明)和弱類型語言(變量的類型操作根據需求而不同)。Shell中的變量是不分類型的(都是字符串類型),但是依賴於具體的上下文,Shell編程也允許比較操作和整數操作。

2. Shell變量的分類

Shell中有3種變量:用戶變量、位置變量(Processing Parameter)、環境變量。

  1.用戶變量:用戶在Shell編程過程中定義的變量,分為全局變量和局部變量。默認情況下,用戶定義的Shell變量為全局變量,如果要指定局部變量,則需使用local限定詞。

  2.位置變量:位置變量也稱系統變量或位置參數,是Shell腳本運行時傳遞給腳本的參數,同時也表示Shell腳本內部的函數參數。他們的名稱是以數字命名(出於歷史原因,直接引用的位置參數只能從0~9,即$0~$9,超過這個範圍的必須用括號括起來,如${10}。特殊系統變量:$#(變量個數),$?(上條命令的結束值),$*(所有參數),$@(與S*同義)。註意:[email protected]

/* */""中時,他們的意義不同,"$*"值是一個字串,"$@"值是N個字串。

  3.環境變量:通常情況下,每個進程都有自己的“環境”,這個環境是由一組變量組成的,這些變量中存有進程可能需要引用的信息。在這種情況下,Shell與一般的進程沒有什麽區別。重要環境變量:PATH,HOME,LD_LIBRARAY_PATH(尋找庫的路徑)。

3. Shell變量的定義和引用

定義變量的語法:varname=value,如果變量值多於一個詞,則必須用引號引起來。

引用變量值的語法:$varname、${varname}。$varname實際上是${varname}的簡略形式。

${varname}這種形式允許我們使用Shell字符串操作的更多高級功能,如下:

替換運算符

變量運算符 替換
${varname:-word}

如果varname存在且非null,則返回varname的值;否則,返回word。

用途:如果變量未定義,則返回默認值。

${varname:=word}

如果varname存在且非null,則返回var那麽的值;否則,將其置未word,然後返回其值。

用途:如果變量未定義,則設為默認值。

${varname:?message}

如果varname存在且非null,則返回varname的值;否則,打印message,並退出當前腳本。

用途:用於捕捉由於變量未定義而導致的錯誤。

${varname:+word}

如果varname存在且非null,則返回varname的值;否則,返回null。

用途:用於測試變量存在。

上表中的每個“:”都是可選的,如果省略“:”,則將每個定義中的“存在且非null”改為“存在”,即變量運算符只判斷變量是否存在。

模式匹配運算符

變量運算符

替換

${varname#pattern}

如果pattern匹配varname的開頭處,則刪除匹配的最短部分,返回剩下的部分。

${varname##pattern}

如果pattern匹配varname的開頭處,則刪除匹配的最長部分,返回剩下的部分。

${varname%pattern}

如果pattern匹配varname的結尾處,則刪除匹配的最短部分,返回剩下的部分。

${varname%%pattern}

如果pattern匹配varname的結尾處,則刪除匹配的最長部分,返回剩下的部分。

${varname/pattern/string}

${varname//pattern/string}

將varname中匹配pattern的最長部分替換為srting。

第一種格式中,只有匹配的第一部分被替換;第二種格式中,varname中所有匹配的部分都被替換。

如果模式以為#開頭,則必須匹配varname的開頭,如果模式%開頭,則必須匹配varname的結尾。

如果string為空,匹配部分被刪除。

[email protected]*,操作被依次應用於每個位置參數,並且擴展為結果列表。  

4. 啟動文件

Shell使用一些啟動文件來協助創建一個運行環境。/etc目錄下的文件提供全局設置,如果用戶主目錄下存在同名文件,它將覆蓋全局設置。

不同Shell的啟動文件

Korn Shell C Shell Bourne Shell Bourne-again Shell

/etc/environment

/ect/profile

$HOME/.profile

$HOME/.kshrc

/etc/environment

/etc/csh.cshrc

/etc/csh.login

$HOME/.cshrc

$HOME/.login

/etc/environment

/etc/profile

$HOME/.profile

/etc/environment

/etc/profile

/etc/bashrc

$HOME/.bash_profile

$HOME/.bashrc

  

  

1.Linux Shell中的變量