1.Linux 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]
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中的變量