shell学习笔记(四)—— shell变量和引用

来源:互联网 发布:手机pdf制作软件 编辑:程序博客网 时间:2024/05/21 19:41

1、深入认识变量

1.1、什么是变量

变量:程序设计语言中一个可以变化的量,当然,可以变化的是变量的值。

变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。


1.2、变量的命名

shell中,变量的命名:可以有字母、数字和下划线组成,并且只能以字母和下划线开头。

shell语言中,变量名是大小写敏感的。

可以简单的认为,变量就是保存在计算机内存中的一系列的价值对。

str=“hello word”

等号左边的是“键”,等号右边的是“值”。

用户使用变量的目,就是通过键来存取不同的值。


1.3、变量的类型

shell是一种动态类型语言和弱类型语言。

所以,在shell中,变量的数据类型无需显示的声明,变量的类型会根据不同的操作有所变化。

shell的变量不区分数据类型,统一按照字符串存储。


动态类型语言、静态类型语言:

根据变量类型的确定时间,可将程序设计语言分为两类,分别是动态类型语言和静态类型语言。

其中,动态类型语言是在程序的执行过程中才确定变量的数据类型的语言,常见的有PHP、Python;

静态类型语言是在程序的编译期间就确定变量的数据类型的语言,常见的有Java,C++。


强类型语言、弱类型语言:

根据是否强制要求变量类型定义,可将成熟设计语言分为强类型语言和弱类型语言。

其中,强类型语言要求在定义变量时就必须明确指定变量的数据类型,例如Java和C++;

弱类型语言不要求在定义变量时用户明确指定变量的数据类型,例如JS、VB。


1.4、变量的定义

1.4.1、直接定义

#定义变量aa="hello word"

1.4.2、通过declare定义

declare attribute variable

attribute的可选值:

-p:显示所有的变量

-i:声明变量为整型

-r:声明变量为只读。只读变量不可以:修改和删除。

-a:声明变量为数组

-f:显示所有自定义函数

-x:将变量设置为环境变量


1.5、变量和引号

shell中的引号:双引号(" "),单引号(' '),反引号(` `)

这些引号的作用,在后面详细介绍。


1.6、变量的作用域

1.6.1、全局变量:

1、脚本中定义的变量都是全局变量,其作用域为从被定义的地方开始,一直到shell脚本结束或被显示的删除;

2、在函数中定义的变量默认情况下也是全局变量,其作用域为从函数被调用时执行变量定义的地方开始,一直到shell脚本结束或被显示的删除;

1.6.2、局部变量:

1、函数的参数是局部变量;

2、在函数内,通过local关键字定义局部变量;


1.7、系统变量、环境变量

1.7.1、系统变量

shell语言的系统变量主要在对参数判断和命令返回值判断是使用。其中,包括脚本和函数的参数、脚本和函数的返回值。

变量说明$n脚本或函数的第n个参数$0当前shell的脚本名称$#命令行参数的个数$?前一个命令或函数的返回状态码$$返回本程序的进程ID(PID)$*以空格分割,返回所有参数。返回的形式为一个字符串:”参数1 参数2 参数3 。。。“$@以空格分割,返回所有参数。返回的形式为多个字符串:"参数1" "参数2" "参数3" 。。。

1.7.2、环境变量

shell环境变量是所有shell程序都可以使用的变量。

具体的环境变量,请查验linux手册。

可以通过set命令,列出所有的环境变量。


2、变量的赋值、替换和清空

2.1、变量赋值

语法:var_name=value

注意:

1、等号的左右两边不能有空格,否则,shell脚本会把空格当成命令来处理而报错。

2、如果value中包含空格、制表符或换行,需要使用引号将其引起来。


2.2、引用变量的值

shell中,可以通过在变量名前加”$“符号来获取变量的值。

例如:$var_name

注意:

$var_name 是 ${var_name}的简写

在变量名容易混淆或难以界定的情况下,请使用其完整形式,避免出错。


2.3、变量的清除

语法:unset var_name


3、变量引用和替换

3.1、引用

引用:shell中,字符串用引用符号将字符串包括起来,以防止其中的特殊字符串被shell解释为其他含义。

常用的引用:

引用符号说明单引号所有的字符都将保留字面意义双引号除了美元字符($),单引号('),反引号(`),反斜杠(\)  之外,
其他所有的字符都将保留字面意义反引号反引号中的字符串经被解析为shell的命令反斜杠转义字符,屏蔽后面字符的特殊意义

3.2、全引用

用单引号括起来(' ')


3.3、部分引用

用双引号括起来(" ")


3.4、命令替换

用反引号括起来(` `)

命令替换,还有另外一种方式:$()的形式。

例如:

1、`pwd`

2、$(pwd)

其中,1和2是完全等价的。


3.5、转义

反斜杠(\)



4、补充:

4.1、未定义变量或空字符串,转换为数字进行算术运算时,结果为0;

例如:

v1=1v2=abcv3=""ret=0;let "ret=v1+tt"echo ${ret}//未定义tt-->0,ret=1let "ret=v1+v2"echo ${ret}//字符串v2-->0,ret=1let "ret=v1+v3"echo ${ret}//空字符串v3-->0,ret=1


4.2、算术表达式求值的方法

1、let "x=x+1"

2、$[x=x+1]

3、$((x=x+1))




0 0