轉載:http://dba10g.blog.51cto.com/764602/1914716
shell領域内,變量的作用不言而喻。
内置變量,是不需要在程式中聲明,就自動存在的,随時可以通路。
Shell 的環境變量分為 set, env 兩種,其中 set 變量可以通過 export 工具導入到 env 變量中。其中,set 是顯示設定shell變量,僅在本 shell 中有效;env 是顯示設定使用者環境變量 ,僅在目前會話中有效。換句話說,set 變量裡包含了 env 變量,但 set 變量不一定都是 env 變量。這兩種變量不同之處在于變量的作用域不同。顯然,env 變量的作用域要大些,它可以在 subshell 中使用。
SHELL
[root@hadoop1 shells]# echo $SHELL
/bin/bash
BASH
顯示bash的完整路徑名
[root@hadoop1 shells]# echo $BASH
BASH_VERSION
bash的版本
[root@hadoop1 shells]# echo $BASH_VERSION
4.1.2(1)-release
HISTCMD
在曆史指令中的排列編号
[root@hadoop1 shells]# echo $HISTCMD
1045
HISTCONTROL
控制指令是否存入曆史腳本檔案中。
[root@hadoop1 shells]# echo $HISTCONTROL
ignoredups
HISTFILE
設定曆史腳本檔案的路徑檔案名
[root@hadoop1 shells]# echo $HISTFILE
/root/.bash_history
HISTFILESIZE
設定曆史腳本檔案存儲指令的最大行數。
[root@hadoop1 shells]# echo $HISTFILESIZE
1000
HISTIGNORE
不存入曆史腳本檔案的指令樣式
HOME
定使用者的家目錄位置
[root@hadoop1 shells]# echo $HOME
/root
HOSTNAME
顯示主機名
[root@hadoop1 shells]# echo $HOSTNAME
hadoop1
HOSTTYPE
顯示主機形态。
[root@hadoop1 shells]# echo $HOSTTYPE
i386
MACHTYPE
描述主機形态的GNU格式
[root@hadoop1 shells]# echo $MACHTYPE
i386-redhat-linux-gnu
顯示目前使用者郵件目錄
[root@hadoop1 shells]# echo $MAIL
/var/spool/mail/root
MAILCHECK
每隔多久就檢查一次郵件
[root@hadoop1 shells]# echo $MAILCHECK
60
PATH
指令的搜尋路徑
[root@hadoop1 shells]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:.....
PPID
父程序的程序編号。
[root@hadoop1 shells]# echo $PPID
2850
RANDOM
随機函數
[root@hadoop1 shells]# echo $RANDOM
29446
REPLY
select和read沒有設定讀取變量時,預設的變量名稱為REPLY。
UID
使用者ID
[root@hadoop1 shells]# echo $UID
USER
使用者名
[root@hadoop1 shells]# echo $USER
root
LOGNAME
登入使用者的使用者名
[root@hadoop1 shells]# echo $LOGNAME
PS1
PS2
提示符
[root@hadoop1 shells]# echo $PS1
[\u@\h \W]\$
[root@hadoop1 shells]# echo $PS2
>
TERM
終端類型
[root@hadoop1 shells]# echo $TERM
vt100
PWD
目前目錄
[root@hadoop1 shells]# echo $PWD
/u02/shells
LANG
設定目前語系的名稱
[root@hadoop1 shells]# echo $LANG
en_US
[root@hadoop1 shells]# echo $LANGUAGE
SECONDS
顯示目前shell的啟動的時間
TMOUT
若該變量的值大于0的話,則bash會在等待TMOUT秒後還沒有任何操作就會自動結束目前的bash shell.
函數範圍變量
$1~$n
位置參數
傳入程式或函數式的參數,第一個參數$1,第二參數$2
$0
執行程式的名稱
代表所有的位置參數,并且視為一個字元串。
代表所有的位置參數,但$@代表各位置參數組成的串行。
位置參數的個數。
上一條指令執行結束後的傳回值。通常0代表執行成功,非0代表執行有誤。
目前bash shell的程序編号。
a. script執行時,bash的絕對路徑。
b. 上一個指令執行時,最後一個位置參數,如上一個指令是:test.sh ABC 123 xyz,則$_的值為’xyz’。
c. 檢查郵件時,$_的值為郵件檔案名。
特殊的IFS
Shell 腳本中有個變量叫 IFS(Internal Field Seprator) ,内部域分隔符.IFS包含系列空白字元
1
2
3
4
5
<code>$ </code><code>echo</code> <code>$IFS </code>
<code> </code>
<code>$ </code><code>echo</code> <code>"$IFS"</code> <code>| od -b </code>
<code>0000000 040 011 012 012 </code>
<code>0000004</code>
表格 B-4. 參數替換和擴充
<col>
表達式
含義
<code>${var}</code>
變量<code>var</code>的值, 與<code>$var</code>相同
<code>${var-DEFAULT}</code>
如果<code>var</code>沒有被聲明, 那麼就以<code>$DEFAULT</code>作為其值 *
<code>${var:-DEFAULT}</code>
如果<code>var沒有被聲明或</code>其值為空, 那麼就以<code>$DEFAULT</code>作為其值 *
<code>${var=DEFAULT}</code>
<code>${var:=DEFAULT}</code>
如果<code>var</code>沒有被聲明, 或者其值為空, 那麼就以<code>$DEFAULT</code>作為其值 *
<code>${var+OTHER}</code>
如果<code>var</code>聲明了, 那麼其值就是<code>$OTHER</code>, 否則就為null字元串
<code>${var:+OTHER}</code>
如 果<code>var</code>被設定了, 那麼其值就是<code>$OTHER</code>, 否則就為null字元串(修改現有值)
<code>${var?ERR_MSG}</code>
如果<code>var</code>沒 被聲明, 那麼就列印<code>$ERR_MSG</code> *
<code>${var:?ERR_MSG}</code>
如果<code>var</code>沒 被設定, 那麼就列印<code>$ERR_MSG</code> *
<code>${!varprefix*}</code>
比對之前所有以<code>varprefix</code>開頭進行聲明的變量
<code>${!varprefix@}</code>
表格 B-5. 字元串操作
<code>${#string}</code>
<code>$string</code>的長度
<code>${string:position}</code>
在<code>$string</code>中, 從位置<code>$position</code>開始提取子串
<code>${string:position:length}</code>
在<code>$string</code>中, 從位置<code>$position</code>開始提取長度為<code>$length</code>的子串
<code>${string#substring}</code>
從 變量<code>$string</code>的開頭, 删除最短比對<code>$substring</code>的子串
<code>${string##substring}</code>
從 變量<code>$string</code>的開頭, 删除最長比對<code>$substring</code>的子串
<code>${string%substring}</code>
從 變量<code>$string</code>的結尾, 删除最短比對<code>$substring</code>的子串
<code>${string%%substring}</code>
從 變量<code>$string</code>的結尾, 删除最長比對<code>$substring</code>的子串
<code>${string/substring/replacement}</code>
使用<code>$replacement</code>, 來代替第一個比對的<code>$substring</code>
<code>${string//substring/replacement}</code>
使 用<code>$replacement</code>, 代替所有比對的<code>$substring</code>
<code>${string/#substring/replacement}</code>
如 果<code>$string</code>的字首比對<code>$substring</code>, 那麼就用<code>$replacement</code>來代替比對到的<code>$substring</code>
<code>${string/%substring/replacement}</code>
如果<code>$string</code>的字尾比對<code>$substring</code>, 那麼就用<code>$replacement</code>來代替比對到的<code>$substring</code>
<code>expr match "$string" '$substring'</code>
比對<code>$string</code>開頭的<code>$substring</code>* 的長度
<code>expr "$string" : '$substring'</code>
匹 配<code>$string</code>開頭的<code>$substring</code>* 的長度
<code>expr index "$string" $substring</code>
在<code>$string</code>中比對到的<code>$substring</code>的第一個字元出現的位置
<code>expr substr $string $position $length</code>
在<code>$string</code>中 從位置<code>$position</code>開始提取長度為<code>$length</code>的子串
<code>expr match "$string" '\($substring\)'</code>
從<code>$string</code>的 開頭位置提取<code>$substring</code>*
<code>expr "$string" : '\($substring\)'</code>
<code>expr match "$string" '.*\($substring\)'</code>
從<code>$string</code>的 結尾提取<code>$substring</code>*
<code>expr "$string" : '.*\($substring\)'</code>
http://allenh.blog.51cto.com/481430/1695810
http://blog.csdn.net/gaoming655/article/details/7238695