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

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、直接定义

#定义变量a
a="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=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


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

1、let "x=x+1"

2、$[x=x+1]

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




你可能感兴趣的:(Linux)