天天看點

shell實戰:内置(built-in)變量

轉載: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

MAIL

顯示目前使用者郵件目錄

[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

繼續閱讀