shell领域内,变量的作用不言而喻。
内置变量,是不需要在程序中声明,就自动存在的,随时可以访问。
Shell 的环境变量分为 set, env 两种,其中 set 变量可以通过 export 工具导入到 env 变量中。其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。换句话说,set 变量里包含了 env 变量,但 set 变量不一定都是 env 变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。
SHELL |
[[email protected] shells]# echo $SHELL /bin/bash |
|
BASH | 显示bash的完整路径名 |
[[email protected] shells]# echo $BASH /bin/bash |
BASH_VERSION | bash的版本 |
[[email protected] shells]# echo $BASH_VERSION 4.1.2(1)-release |
HISTCMD | 在历史指令中的排列编号 | [[email protected] shells]# echo $HISTCMD 1045 |
HISTCONTROL | 控制指令是否存入历史脚本文件中。 |
[[email protected] shells]# echo $HISTCONTROL ignoredups |
HISTFILE | 设定历史脚本文件的路径文件名 |
[[email protected] shells]# echo $HISTFILE /root/.bash_history |
HISTFILESIZE | 设定历史脚本文件存储指令的最大行数。 | [[email protected] shells]# echo $HISTFILESIZE 1000 |
HISTIGNORE | 不存入历史脚本文件的指令样式 | |
HOME | 定用户的家目录位置 |
[[email protected] shells]# echo $HOME /root |
HOSTNAME | 显示主机名 |
[[email protected] shells]# echo $HOSTNAME hadoop1 |
HOSTTYPE | 显示主机形态。 | [[email protected] shells]# echo $HOSTTYPE i386 |
MACHTYPE | 描述主机形态的GNU格式 | [[email protected] shells]# echo $MACHTYPE i386-redhat-linux-gnu |
显示当前用户邮件目录 | [[email protected] shells]# echo $MAIL /var/spool/mail/root |
|
MAILCHECK | 每隔多久就检查一次邮件 |
[[email protected] shells]# echo $MAILCHECK 60 |
PATH | 命令的搜寻路径 |
[[email protected] shells]# echo $PATH /usr/lib/qt-3.3/bin:/usr/local/sbin:..... |
PPID | 父进程的进程编号。 |
[[email protected] shells]# echo $PPID 2850 |
RANDOM | 随机函数 |
[[email protected] shells]# echo $RANDOM 29446 |
REPLY | select和read没有设定读取变量时,默认的变量名称为REPLY。 | |
UID | 用户ID |
[[email protected] shells]# echo $UID 0 |
USER | 用户名 |
[[email protected] shells]# echo $USER root |
LOGNAME | 登录用户的用户名 |
[[email protected] shells]# echo $LOGNAME root |
PS1 PS2 |
提示符 |
[[email protected] shells]# echo $PS1 [\[email protected]\h \W]\$ [[email protected] shells]# echo $PS2 > |
TERM | 终端类型 |
[[email protected] shells]# echo $TERM vt100 |
PWD | 当前目录 |
[[email protected] shells]# echo $PWD /u02/shells |
LANG | 设置当前语系的名称 |
[[email protected] shells]# echo $LANG en_US [[email protected] shells]# echo $LANGUAGE en_US |
SECONDS | 显示当前shell的启动的时间 | |
TMOUT | 若该变量的值大于0的话,则bash会在等待TMOUT秒后还没有任何操作就会自动结束当前的bash shell. |
函数范围变量
$1~$n |
位置参数 传入程序或函数式的参数,第一个参数$1,第二参数$2 |
|
$0 | 执行程序的名称 | |
$* |
代表所有的位置参数,并且视为一个字符串。 | |
[email protected] |
代表所有的位置参数,但[email protected]代表各位置参数组成的串行。 | |
$# |
位置参数的个数。 | |
$? |
上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。 | |
$$ |
目前bash shell的进程编号。 | |
$_ |
a. script执行时,bash的绝对路径。 b. 上一个命令执行时,最后一个位置参数,如上一个命令是:test.sh ABC 123 xyz,则$_的值为’xyz’。 c. 检查邮件时,$_的值为邮件文件名。 |
特殊的IFS
Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.IFS包含系列空白字符
$ 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 开头进行声明的变量 |
${[email protected]} |
匹配之前所有以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