转载: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