码迷,mamicode.com
首页 > 系统相关 > 详细

shell实战:内置(built-in)变量

时间:2017-04-10 23:48:52      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:linux

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

/bin/bash

BASH_VERSIONbash的版本

[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

REPLYselect和read没有设定读取变量时,默认的变量名称为REPLY。
UID用户ID

[root@hadoop1 shells]# echo $UID

0

USER用户名

[root@hadoop1 shells]# echo $USER    

root

LOGNAME登录用户的用户名

[root@hadoop1 shells]# echo $LOGNAME

root

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

en_US

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包含系列空白字符

$ 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开头进行声明的变量
${!varprefix@}匹配之前所有以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)变量

标签:linux

原文地址:http://dba10g.blog.51cto.com/764602/1914716

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!