shell实战:内置(built-in)变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell实战:内置(built-in)变量相关的知识,希望对你有一定的参考价值。
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
本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/1914716
以上是关于shell实战:内置(built-in)变量的主要内容,如果未能解决你的问题,请参考以下文章
Built-in Functions(python3内置函数)