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

MAIL 显示当前用户邮件目录 [[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

时间: 2024-08-07 11:48:14

shell实战:内置(built-in)变量的相关文章

Maven内置隐式变量(转)

Maven提供了三个隐式的变量可以用来访问环境变量,POM信息,和Maven Settings env env变量,暴露了你操作系统或者shell的环境变量.便 如在Maven POM中一个对${env.PATH}的引用将会被${PATH}环境变量替换,在Windows中为%PATH%. projetc project变量暴露了POM.可以使用点标记(.)的路径来引用POM元素的值.例如 <project><modelVersion>4.0.0</modelVersion&g

shell中内置关键字[[]]:检查条件是否成立

0.[[]] [] (())的对比 [[ ]] 对数字的比较不友好,所以使用 if 判断条件时,建议用(())来处理整型数字,用[[]]来处理字符串或者文件.   用法 说明 脚本 支持逻辑运算符 (()) ((expression)) 不需要注意空格 在 (( )) 中使用变量可以加也可以不加$前缀,(( )) 会自动解析变量名 只用于进行整数运算 可以使用<.<=.>.>=等进行整数运算 表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔 对于多个表达式的情况,以最后

JSP之指令、动作元素、内置对象、变量作用域

1.指令(三大指令) 指令                                指令描述 <%@ page ... %>                 定义网页依赖属性,比如脚本语言.error页面.缓存需求等等 <%@ include ... %>              包含其他文件 <%@ taglib ... %>                引入标签库的定义 例如: <%@ page language = "java"

linux shell字符串内置的常用操作(获取长度、查找、替换)

在编写shell程序时,经常会涉及到字符串相关操作.有许多命令语句,如awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号,能够达到相似效果,使用内部操作符会省略启动外部程序等时间,因此速度会很的快.如果内置的操作符能够做到的,优先使用内置的. 1 推断读取字符串值                                        

shell 的内置命令与外部命令的区别

shell命令通常分为两类: 内置命令(man builtins) 外部命令 下面分析两者的区别. 内置命令: 内部命令被构建在shell之中.当执行shell命令时,内部命令的执行速度非常快.这是因为没有其他的进程因为执行这条命令而被创建.比如说,当我们执行"cd"命令时,没有进程被创建.在执行过程中只是简单的改变当前的目录. 外部命令: 外部命令并没有被构建在shell中.这些可执行的外部命令保存在一个独立的文件当中.当一个外部命令被执行时,一个新的进程即被创建同时命令被执行. 通

nginx内置预定义变量

nginx的配置文件中可以使用的内置变量以美元符$开始,也有人叫全局变量.其中,部分预定义的变量的值是可以改变的. $arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数的值. $args 这个变量等于GET请求中的参数.例如,foo=123&bar=blahblah;这个变量只可以被修改 $binary_remote_addr 二进制码形式的客户端地址. $body_bytes_sent 传送页面的字节数 $content_length 请求头中的Content-

UnityShader 语义、内置文件、变量

内置文件 cgnic name Describe UnityCG.cginc ,包含了最常用变量.帮助函数.宏.结构体 Lighting.cginc 各种内置的光照模型,表面着色器会自动包含该文件 HLSLSupport.cginc 声明了许多用于跨平台编译的宏和定义 UnityGlobalIllumination.cginc 全局光照 内置常用结构体 struct name include variables appdata_base 顶点位置.顶点法线.第一组纹理坐标 appdata_tan

linux shell bash 内置变量参考

特殊的shell变量 测试操作: 二元比较 算 术比较 字符串比较 文件类型操作 参数替换和扩展 字符串操作 一些结构的汇总 特殊的shell变量 变量 含义 $0 脚本名 $1 -$9 位置参数1-9 ${10} 位置参数10 $# 位置参数的个数 "$*" 所有位置参数(作为单个字符串) "[email protected]" 所有位置参数(每个作为单独字符串) ${#*} 传递到脚本中的命令行参数的个数 ${#*} 传递到脚本中的命令行参数的个数 $? 返回值

Shell重写内置命令--cd

场景介绍 windows下使用cygwin,使用apktool重打包apk: 方式一 cd D:cd path/to/apk/in/dapktool d name.apk 方式二 将文件拖进cygwin窗口,删除尾部的文件名CTRL+Acd SPACEapktool d name.apk 方式三 `I` 将文件拖进cygwin窗口 cd SPACE `dirname ******` 方式四 直接拖文件目录至cygwin 方式Final-1 修改.bashrc:重写cd方法 function cd

Jmeter之Bean shell使用-常用内置变量

Bean Shell常用内置变量   JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”); ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext. vars - (JMeterVariables):操作jmeter变量,这个变量实