SHELL 内置变量

来源:互联网 发布:二胡曲 知乎 编辑:程序博客网 时间:2024/06/10 20:19
这些内建的变量,将影响bash脚本的行为.

 $BASH

这个变量将指向Bash的二进制执行文件的位置.

 

 $BASH_ENV

这个环境变量将指向一个Bash启动文件,这个启动文件将在调用一个脚本时被读取.

 

 $BASH_SUBSHELL

这个变量将提醒subshell的层次,这是一个在version3才被添加到Bash中的新特性.

 $BASH_VERSINFO[n]
记录Bash安装信息的一个6元素的数组.与下边的$BASH_VERSION很像,但这个更加详细.
# BASH_VERSINFO[0] = 3                       主版本号
# BASH_VERSINFO[1] =00                      次版本号
# BASH_VERSINFO[2] = 14                     # Patch 次数.
# BASH_VERSINFO[3] = 1                      # Build version.
# BASH_VERSINFO[4] = release                 # Release status.
# BASH_VERSINFO[5] = i386-redhat-linux-gnu    # Architecture

 

 $BASH_VERSION
安装在系统上的Bash的版本号.

使用这个变量对于判断系统上到底运行的是那个shll来说是一种非常好的办法.$SHELL有时将不能给出正确的答案.

 

 $DIRSTACK
在目录栈中最上边的值(将受到pushdpopd的影响).这个内建的变量与dirs命令是保持一致的,但是dirs命令将显示目录栈的整个内容.

 

 $EDITOR
脚本调用的默认编辑器,一般是vi或者是emacs.

 $EUID
"effective"用户ID当前用户被假定的任何id.可能在su命令中使用.
注意:$EUID并不一定与$UID相同.

 

 $FUNCNAME          当前函数的名字.

 $GLOBIGNORE
一个文件名的模式匹配列表,如果在file globbing中匹配到的文件包含这个列表中的
某个文件,那么这个文件将被从匹配到的文件中去掉.

 

 $GROUPS
当前用户属于的组.
这是一个当前用户的组id列表(数组),就像在/etc/passwd中记录的一样.

 $HOME
用户的home目录,一般都是/home/username

 

 $HOSTNAME
hostname命令将在一个init脚本中,在启动的时候分配一个系统名字.gethostname()函数将用来设置这个$HOSTNAME内部变量

 

 $HOSTTYPE
主机类型就像$MACHTYPE,识别系统的硬件.

 

 $IFS
内部域分隔符这个变量用来决定Bash在解释字符串时如何识别域,或者单词边界.
$IFS默认为空白(空格,tab,和新行),但可以修改,比如在分析逗号分隔的数据文件时.


 $IGNOREEOF
忽略EOF: 告诉shelllog out之前要忽略多少文件结束符(control-D).

 

 $LC_COLLATE
常在.bashrc/etc/profile中设置,这个变量用来在文件名扩展和模式匹配校对顺序.
如果$LC_COLLATE被错误的设置,那么将会在filename globbing中引起错误的结果.
注意:2.05以后的Bash版本中,filename globbing将不在对[]中的字符区分大小写.

 $LC_CTYPE
这个内部变量用来控制globbing和模式匹配的字符串解释.

 

 $LINENO
这个变量记录它所在的shell脚本中它所在行的行号.这个变量一般用于调试目的.

 $MACHTYPE
系统类型提示系统硬件

 $OLDPWD
老的工作目录("OLD-print-working-directory",你所在的之前的目录)

 

 $OSTYPE
操作系统类型.

 

 $PATH
指向Bash外部命令所在的位置,一般为/usr/bin,/usr/X11R6/bin,/usr/local/bin.
当给出一个命令时,Bash将自动对$PATH中的目录做一张hash.$PATH中以":"分隔的
目录列表将被存储在环境变量中.一般的,系统存储的$PATH定义在/ect/processed
PATH=${PATH}:/opt/bin将把/opt/bin目录附加到$PATH变量中.在脚本中,这是一个添加目录到$PATH中的便捷方法.这样在这个脚本退出的时候,$PATH将会恢复(因为这个shell是个子进程,像这样的一个脚本是不会将它的父进程的环境变量修改的)

 

 $PIPESTATUS
数组变量将保存最后一个运行的前台管道的退出码.有趣的是,这个退出码和最后一个命令运行的退出码并不一定相同.

 $PPID
一个进程的$PPID就是它的父进程的进程id(pid).[1]使用pidof命令对比一下.

 $PROMPT_COMMAND
这个变量保存一个在主提示符($PS1)显示之前需要执行的命令.

 

 $PS1
主提示符,具体见命令行上的显示.

 

 $PS2
2提示符,当你需要额外的输入的时候将会显示,默认为">".

 

 $PS3
3提示符,在一个select循环中显示

 

 $PS4
4提示符,当使用-x选项调用脚本时,这个提示符将出现在每行的输出前边默认为"+".

 

 $PWD
工作目录(你当前所在的目录).pwd内建命令作用相同.

 

 $REPLY
read命令如果没有给变量,那么输入将保存在$REPLY.select菜单中也可用,但是只提供选择的变量的项数,而不是变量本身的值. $REPLY'read'命令结果保存的默认变量.

 

$SECONDS
这个脚本已经运行的时间(单位为秒).

 $SHELLOPTS
这个变量里保存shell允许的选项,这个变量是只读的.


 $SHLVL
Shell层次,就是shell层叠的层次,如果是命令行那$SHLVL就是1,如果命令行执行的脚本中,$SHLVL就是2,以此类推.

 

 $TMOUT
如果$TMOUT环境变量被设置为一个非零的时间值,那么在过了这个指定的时间之后,shell提示符将会超时,这会引起一个logout.,2.05b版本的Bash,已经支持在一个带有read命令的脚本中使用$TMOUT变量.

 

Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
Bash shell中经常会见到一些比较特殊的符号

位置参数:
$1, $2, $3等等...
位置参数,从命令行传递给脚本,或者是传递给函数.或者赋给一个变量.此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。
$0表示当前执行的进程名,script 本身的名字,或者在正则表达式中表示整行输出

$#
命令行或者是位置参数的个数.(Example 33-2)
$*
所有的位置参数,被作为一个单词.注意:"$*"必须被""引用.
$@
$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,
并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词.
注意:"$@"必须被""引用.

 

其他的特殊参数
$-
传递给脚本的falg(使用set 命令).参考Example 11-15.
显示shell使用的当前选项,与set命令功能相同
注意:这起初是ksh 的特征,后来被引进到Bash 中,但不幸的是,在Bash 中它看上去也不
能可靠的工作.使用它的一个可能的方法就是让这个脚本进行自我测试(查看是否是交
互的).
$!
在后台运行的最后的工作的PID(进程ID).
$_
保存之前执行的命令的最后一个参数.
$?
命令,函数或者脚本本身的退出状态(见Example 23-7)
用于检查上一个命令,函数或者脚本执行是否正确。(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错。)
$$
脚本自身的进程ID.这个变量经常用来构造一个"unique"的临时文件名.
(参考Example A-13,Example 29-6,Example 12-28 和Example 11-25).
这通常比调用mktemp 来得简单.
注意事项:
[1] 当前运行的脚本的PID $$.
[2] "argument""parameter"这两个单词经常不加区分的使用.在这整本书中,这两个
单词的意思完全相同.(在翻译的时候就未加区分,统统翻译成参数)

0 0