SHELL 变量
1. SHELL变量综述
SHELL 是动态语言类型和弱类型语言,变量在使用之前不用显示定义。SHELL的变量不分数据类型,统一按字符串存储。但是根据上下文环境,允许执行不同的操作。
2. SHELL变量定义
declare attribute variable 可用于显示定义变量的类型
-i 定义为整型,之后就可以直接对表达式求值,结果只能为整数,如果求值失败或不是整数,就设置为0.
-r 定义为只读变量,之后变量不可以修改,不可以删除。
3. SHELL变量数据类型
SHELL不支持浮点数
SHELL 实际上只有2种数据类型,字符串与整数,默认是字符串类型。
4. 引号
4.1 单引号 ’
单引号括起来的字符当做普通字符出现;
4.2 双引号 “
双引号括起来的字符当做普通字符出现,如下四个字符除外:
美元符号: $
反斜线:
单引号: ‘
双引号: “
4.3 反引号 `
反引号括起来的字符串被SHELL解释为命令,在执行时,SHELL首先执行该命令,并以它的输出结果取代整个反引号。
5. 变量的作用域
5.1 全局变量:
变量默认是全局变量;
在脚本中定义的变量是全局变量,其作用域为从被定义的地方开始,直到SHELL脚本结束或变量被显示删除。
在函数中定义的变量是全局变量,其作用域为从函数被调用时执行变量定义的地方开始,直到SHELL脚本结束或变量被显示删除。
5.2 局部变量
局部变量需要显示定义,如在函数内部可通过 local v=200 来定义局部变量,其作用域为从定义的地方开始直到函数结束或是被显示删除
5.3 变量覆盖
当函数内部出现与函数外部同名的局部变量时;函数内部的局部变量会屏蔽函数外部的同名全局变量。
6. 系统变量
主要是对参数的判断和命令返回值判断时使用。
变量 |
说明 |
$n |
n表示参数的位置,如$1表示第一个参数,$2表示第二参数....... |
$# |
命令行参数的个数 |
$0 |
当前SHELL脚本的名称 |
$? |
前一个命令或邯郸的返回代码,0表示成功 |
$* |
所有参数以空格分割的字符串,如: 参数1 参数2 参数3 ...... |
$@ |
所有参数以空格分割的字符串,如: “参数1” “参数2” “参数3” ...... |
$$ |
返回本程序的进程ID (PID) |
7. 环境变量
环境变量是所有SHELL程序都可以使用的变量。如:
PATH,HOME,IFS,PWD,SHELL等。
set 命令可以列出所有的环境变量。
8. 变量赋值与清空
在SHELL中变量是不需要专门的定义与初始化的,未定义的变量与未初始化的变量默认是一个空字符串。
variable=value
注意:
赋值号=两边不能有空格,否则SHELL会将其视为命令
value 中如果包含空格、制表符、换行符,则必须用单引号或双引号括起来;并且双引号内允许变量替换,单引号内部允许变量替换。
变量引用用$
${var}
清除变量
unset var_name
9. 引用于替换
所谓引用,是指把字符串用引用符号包括起来,以防止其中的特殊字符被SHELL解释为其它含义。
引用符合 |
说明 |
双引号 |
除美元符合、反引号、单引号和反斜线以为,其它所有字符保持字面含义 |
单引号 |
所有字符保持字面含义 |
反引号 |
反引号中的字符串被解释为SHELL命令执行 |
反斜线 |
转义字符 |
9.1 全引用
既字符串被单引号括起来
9.2 部分引用
既字符串被双引号括起来
9.3 命令替换
指在SHELL中,把某个SHELL命令的执行结果赋给某个变量,在SHELL中,有两种方法可以进行命令替换,这两种方法是等价的:
用反引号: `shell_command`
用圆括号: $(shell_command)