变量:程序设计语言中一个可以变化的量,当然,可以变化的是变量的值。
变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。
shell中,变量的命名:可以有字母、数字和下划线组成,并且只能以字母和下划线开头。
shell语言中,变量名是大小写敏感的。
可以简单的认为,变量就是保存在计算机内存中的一系列的价值对。
str=“hello word”
等号左边的是“键”,等号右边的是“值”。
用户使用变量的目,就是通过键来存取不同的值。
shell是一种动态类型语言和弱类型语言。
所以,在shell中,变量的数据类型无需显示的声明,变量的类型会根据不同的操作有所变化。
shell的变量不区分数据类型,统一按照字符串存储。
动态类型语言、静态类型语言:
根据变量类型的确定时间,可将程序设计语言分为两类,分别是动态类型语言和静态类型语言。
其中,动态类型语言是在程序的执行过程中才确定变量的数据类型的语言,常见的有PHP、Python;
静态类型语言是在程序的编译期间就确定变量的数据类型的语言,常见的有Java,C++。
强类型语言、弱类型语言:
根据是否强制要求变量类型定义,可将成熟设计语言分为强类型语言和弱类型语言。
其中,强类型语言要求在定义变量时就必须明确指定变量的数据类型,例如Java和C++;
弱类型语言不要求在定义变量时用户明确指定变量的数据类型,例如JS、VB。
#定义变量a
a="hello word"
declare attribute variable
attribute的可选值:
-p:显示所有的变量
-i:声明变量为整型
-r:声明变量为只读。只读变量不可以:修改和删除。
-a:声明变量为数组
-f:显示所有自定义函数
-x:将变量设置为环境变量
shell中的引号:双引号(" "),单引号(' '),反引号(` `)
这些引号的作用,在后面详细介绍。
1、脚本中定义的变量都是全局变量,其作用域为从被定义的地方开始,一直到shell脚本结束或被显示的删除;
2、在函数中定义的变量默认情况下也是全局变量,其作用域为从函数被调用时执行变量定义的地方开始,一直到shell脚本结束或被显示的删除;
1、函数的参数是局部变量;
2、在函数内,通过local关键字定义局部变量;
shell语言的系统变量主要在对参数判断和命令返回值判断是使用。其中,包括脚本和函数的参数、脚本和函数的返回值。
变量 | 说明 |
$n | 脚本或函数的第n个参数 |
$0 | 当前shell的脚本名称 |
$# | 命令行参数的个数 |
$? | 前一个命令或函数的返回状态码 |
$$ | 返回本程序的进程ID(PID) |
$* | 以空格分割,返回所有参数。返回的形式为一个字符串:”参数1 参数2 参数3 。。。“ |
$@ | 以空格分割,返回所有参数。返回的形式为多个字符串:"参数1" "参数2" "参数3" 。。。 |
shell环境变量是所有shell程序都可以使用的变量。
具体的环境变量,请查验linux手册。
可以通过set命令,列出所有的环境变量。
语法:var_name=value
注意:
1、等号的左右两边不能有空格,否则,shell脚本会把空格当成命令来处理而报错。
2、如果value中包含空格、制表符或换行,需要使用引号将其引起来。
shell中,可以通过在变量名前加”$“符号来获取变量的值。
例如:$var_name
注意:
$var_name 是 ${var_name}的简写
在变量名容易混淆或难以界定的情况下,请使用其完整形式,避免出错。
语法:unset var_name
引用:shell中,字符串用引用符号将字符串包括起来,以防止其中的特殊字符串被shell解释为其他含义。
常用的引用:
引用符号 | 说明 |
单引号 | 所有的字符都将保留字面意义 |
双引号 | 除了美元字符($),单引号('),反引号(`),反斜杠(\) 之外, 其他所有的字符都将保留字面意义 |
反引号 | 反引号中的字符串经被解析为shell的命令 |
反斜杠 | 转义字符,屏蔽后面字符的特殊意义 |
用单引号括起来(' ')
用双引号括起来(" ")
用反引号括起来(` `)
命令替换,还有另外一种方式:$()的形式。
例如:
1、`pwd`
2、$(pwd)
其中,1和2是完全等价的。
反斜杠(\)
例如:
v1=1
v2=abc
v3=""
ret=0;
let "ret=v1+tt"
echo ${ret}//未定义tt-->0,ret=1
let "ret=v1+v2"
echo ${ret}//字符串v2-->0,ret=1
let "ret=v1+v3"
echo ${ret}//空字符串v3-->0,ret=1
1、let "x=x+1"
2、$[x=x+1]
3、$((x=x+1))