轉載: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 /bin/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 0 |
USER | 用戶名 | [root@hadoop1 shells]# echo $USER root |
LOGNAME | 登錄用戶的用戶名 | [root@hadoop1 shells]# echo $LOGNAME root |
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 en_US |
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 | $ echo $IFS $ echo "$IFS" | od -b 0000000 040 011 012 012 0000004 |
表格 B-4. 參數替換和擴展
表達式 | 含義 |
---|---|
${var} | 變量var 的值, 與$var 相同 |
${var-DEFAULT} | 如果var 沒有被聲明, 那麼就以$DEFAULT 作爲其值 * |
${var:-DEFAULT} | 如果var沒有被聲明或 其值爲空, 那麼就以$DEFAULT 作爲其值 * |
${var=DEFAULT} | 如果var 沒有被聲明, 那麼就以$DEFAULT 作爲其值 * |
${var:=DEFAULT} | 如果var 沒有被聲明, 或者其值爲空, 那麼就以$DEFAULT 作爲其值 * |
${var+OTHER} | 如果var 聲明瞭, 那麼其值就是$OTHER , 否則就爲null字符串 |
${var:+OTHER} | 如 果var 被設置了, 那麼其值就是$OTHER , 否則就爲null字符串(修改現有值) |
${var?ERR_MSG} | 如果var 沒 被聲明, 那麼就打印$ERR_MSG * |
${var:?ERR_MSG} | 如果var 沒 被設置, 那麼就打印$ERR_MSG * |
${!varprefix*} | 匹配之前所有以varprefix 開頭進行聲明的變量 |
${!varprefix@} | 匹配之前所有以varprefix 開頭進行聲明的變量 |
表格 B-5. 字符串操作
表達式 | 含義 |
---|---|
${#string} | $string 的長度 |
${string:position} | 在$string 中, 從位置$position 開始提取子串 |
${string:position:length} | 在$string 中, 從位置$position 開始提取長度爲$length 的子串 |
${string#substring} | 從 變量$string 的開頭, 刪除最短匹配$substring 的子串 |
${string##substring} | 從 變量$string 的開頭, 刪除最長匹配$substring 的子串 |
${string%substring} | 從 變量$string 的結尾, 刪除最短匹配$substring 的子串 |
${string%%substring} | 從 變量$string 的結尾, 刪除最長匹配$substring 的子串 |
${string/substring/replacement} | 使用$replacement , 來代替第一個匹配的$substring |
${string//substring/replacement} | 使 用$replacement , 代替所有匹配的$substring |
${string/#substring/replacement} | 如 果$string 的前綴匹配$substring , 那麼就用$replacement 來代替匹配到的$substring |
${string/%substring/replacement} | 如果$string 的後綴匹配$substring , 那麼就用$replacement 來代替匹配到的$substring |
expr match "$string" '$substring' | 匹配$string 開頭的$substring * 的長度 |
expr "$string" : '$substring' | 匹 配$string 開頭的$substring * 的長度 |
expr index "$string" $substring | 在$string 中匹配到的$substring 的第一個字符出現的位置 |
expr substr $string $position $length | 在$string 中 從位置$position 開始提取長度爲$length 的子串 |
expr match "$string" '\($substring\)' | 從$string 的 開頭位置提取$substring * |
expr "$string" : '\($substring\)' | 從$string 的 開頭位置提取$substring * |
expr match "$string" '.*\($substring\)' | 從$string 的 結尾提取$substring * |
expr "$string" : '.*\($substring\)' | 從$string 的 結尾提取$substring * |
http://allenh.blog.51cto.com/481430/1695810
http://blog.csdn.net/gaoming655/article/details/7238695