一、认识变量
1.1 什么是变量
顾名思义,变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。
1.2 变量的命名
在Shell中,变量名可以由字母、数字或者下划线组成,并且只能以字母数字或者下划线开头,变量名的长度并不做限制,但是为了提高程序的可读性,建议用户使用相对较短的字符串作为变量名。在通常情况下,变量名应该由有明确的含义的英文单词组成,这样,用户通过变量名就可以了解变量的作用。
1.3 变量的类型
在Shell中变量的类型无需显示的声明,变量的数据类型会根据不同的操作有所变化。
1.4 变量的定义
【1】 直接定义
#! /bin/bash
#定义变量a
a=1
#定义变量b
b="hello"
#定义变量c
c="hello world"
【2】使用declare声明
declare的语法如为:declare attribute variable
其中attribute表示变量的属性,常用的属性如下:
属性 | 含义 |
---|---|
-p | 显示所有变量的值。 |
-i | 将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值结果失败或者不是整数,就设置为0 |
-r | 将变量声明为只读变量。 |
-a | 变量声明为数组变量,在shell中所有的变量都是数组,赋值给没有下标的变量与赋值给下标为0的数组元素相同。 |
-f | 显示所有自定义函数,包括名称和函数体。 |
-x | 将变量设置为环境变量,这样在随后的脚本和程序中就可以使用了。 |
#! /bin/bash
declare -i x
#将算术式赋值给变量x
x=6/3
echo ${x}
#取消变量x的整数属性
declare +x x
x=3.14
echo ${x}
1.5 变量和引号
【1】单引号(’’)
单引号括起来的字符都作为普通字符出现。
【2】双引号("")
用双引号括起来的字符,除“$”、“\”、"'"和““”这几个字符仍是特殊字符并保留其特殊功能,其余字符作为普通字符对待。
【3】反引号(``)
被反引号括起来的字符串被shell解释为命令,在执行时,shell首先执行该命令,并以标准输出结果取代整个反引号部分。
#! /bin/bash
#输出当前目录
echo "Current directory is `pwd`"
1.6 变量的作用域
【1】全局变量
在Shell中全局变量可以在脚本中定义也可以在函数中定义。在脚本中定义的变量都是全局变量,其作用域为从被定义的地方开始,一直到shell脚本结束或者被显式的删除。
#! /bin/bash
#定义函数
func()
{
#输出变量的值
echo "$v1"
#修改变量x的值
v1=200
}
#在脚本中定义变量x
v1=100
#调用函数
func
#输出变量x的值
echo "$v1"
【2】局部变量
在shell中,可以在函数内部通过local关键字定义局部变量,另外,函数的参数也是局部变量。
#!/bin/bash
#定义函数
func()
{
#使用local定义局部变量
local v2=100
}
#调用函数
func
#输出变量的值
echo "$v2"
1.7 系统变量
变量 | 说明 |
---|---|
$n | n是一个整数,从1开始,表示参数的位置,例如$1便是第一个参数。 |
$# | 命令行参数的个数 |
$0 | 当前shell脚本的名称 |
$? | 前一个命令或者函数的返回状态码 |
$* | 以”参数1 参数2“…的形式将所有的参数通过一个字符串返回 |
$@ | 以”参数1“ ”参数2“…的形式返回每个参数 |
$$ | 返回本程序的进程ID |
1.8 环境变量
常用的变量如下,你也可以通过set命令获取所有环境变量。
变量 | 说明 |
---|---|
PATH | 命令搜索路径,以冒号作为分隔符。 |
HOME | 用户主路经的路径名,是cd命令的默认参数。 |
IFS | 定义shell使用的分隔符 |
LOGNAME | 当前的登录名。 |
SHELL | shell的全路径名 |
TERM | 终端类型 |
TMOUT | Shell自动退出的时间,单位为秒,若设置为0则禁止SHELL自动退出 |
PWD | 当前工作目录 |
二、变量的赋值和清空
2.1 变量的赋值
赋值语法为:variable_name=value
中间的等于号为赋值符号,赋值符号的左右两边不能直接跟空格,否则shell会将其视为命令。
2.2 变量的引用
在shell中,用户可以通过在变量名前加”$“来获取该变量的值。 为了使Shell能够正确的界定变量名,避免混淆,用户引用变量时可以使用大括号将变量括起来,如下:
echo "${v1}abc"
2.3 清除变量
清除变量使用unset命令,用法如下:unset variable_name
三、引用和替换
3.1 引用
所谓引用就是将字符串使用引用符号括起来,以防止其中的特殊字符被Shell解释为其他含义。
Shell中一共有四种引用符号如下表:
引用符号 | 说明 |
---|---|
双引号 | 除美元符号、单引号、反引号和反斜线外,其他所有字符都保持字面意义。 |
单引号 | 所有字符都保持字面意义 |
反引号 | 反引号中的字符串将被解释为Shell命令 |
反斜线 | 转义字符,屏蔽后面字符的特殊含义 |
3.2 全引用
因为被单引号括起来的字符串都保持其字面意义,因此这种引用方式被称为全引用。
#!/bin/bash
v1="Hello World!"
#输出含有变量名的字符串
echo 'This is $v1'
3.3 部分引用
因为双引号括起来的字符,其中包含的字符除美元符号、反引号以及斜线外的所有字符都被解释为字面意义,因此也称为部分引用。
#!/bin/bash
v1="Hello World!"
#输出含有变量名的字符串
echo "This is $v1"
3.4 命令替换
所谓命令替换就是在Shell程序中,将某个Shell命令执行结果赋值给某个变量。在bash中有两种方式可以用来进行命令替换,分别是反引号和圆括号:
shell_command
$(shell_command)
#! /bin/bash
v1=`pwd`
v2=$(pwd)
echo "v1 = $v1"
echo "v2 = $v2"
3.5 转义
转义就是转换某些特殊字符的意义。转义使用反斜线表示,当反斜线后面的一个字符具有特殊意义时,反斜线将屏蔽该字符的特殊意义。
#! /bin/bash
echo $(pwd)
echo \$(pwd)