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

/bin/bash

BASH_VERSIONbash的版本

[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

REPLYselect和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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章