天天看点

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

继续阅读