Shell脚本入门 02:变量与特殊变量

Posted Naisu Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本入门 02:变量与特殊变量相关的知识,希望对你有一定的参考价值。

目的

Shell作为脚本来使用时就相当于一门编程语言,编程语言最基本的就是变量(或者说是变量所指代的数据),各种操作最终操作的都属数据。这篇文章将对Shell脚本中变量相关内容做个说明。

变量的基础使用

变量定义与赋值
可以使用 declare 命令来定义变量并设置其属性,不过通常使用下面的方式来定义变量:

variable=value # value中不能出现空格
variable='value' # ''内部所有内容都变为单纯的字符串,即使遇到$和``也不进行替换
variable="value" # ""内部遇到$和``以及转义符会进行替换
# variable是变量名,value是赋给变量的值
# 赋值=周围不能有空格(重点)
# 所有变量的值都是字符串,比如var=123,123也会以字符串形式存储,即'123'或是"123"
# 变量定义后可以使用=重新赋值

除了直接将值赋给变量,也可以将命令的结果赋给变量,使用下面方式:

variable=`command`
variable=$(command)

需要特别注意的一点是如果被替换的命令的输出内容包括多行(也即有换行符),或者含有多个连续的空白符,那么在输出变量时应该将变量用双引号包围,否则系统会使用默认的空白符来填充,这会导致换行无效,以及连续的空白符被压缩成一个。

使用变量
可以用$来引用变量,比如下面操作输出变量内容:

echo $variable
echo $variable # 推荐的方式


只读变量
可以使用 readonly 关键词修饰变量为只读:

readonly variable=value

删除变量
使用 unset 关键词来删除变量(无法删除只读变量):

unset variable

变量的作用域

默认情况下Shell中定义的变量在当前进程中都是全局有效的。在函数中可以使用 local 关键词来修饰声明局部变量:

Shell中定义的变量只是在当前进程中有效,在其它线程中,比如其进程线程中都是无效的。可以使用 export 关键词来修饰变量使其成为环境变量,这样在当前进程或是其子进程中都将可以使用:

特殊变量

在Shell中有一些特殊变量,主要如下:

变量说明
$0当前脚本的文件名
$n传递给脚本或函数的参数
n表示第几个参数,第一个参数是$1,第二个参数是$2,依此类推
$#传递给脚本或函数的参数个数
$*传递给脚本或函数的所有参数,整体上为一个变量
$@传递给脚本或函数的所有参数,当用双引号包围时所有参数数独立的,相当于一个数组
$?上个命令或函数的退出状态
$$使用该变量时的进程号

declare命令

declare 命令可以用来设置变量的值和属性,类似的还有 typeset 命令。

declare 命令使用方式如下(可以使用 declare --help 来查看):
declare [+/-] [aAfFgilprtux] [变量名=变量值] 其中 - 表示设置属性, + 表示取消属性。

部分选项说明如下:

选项说明
-p显示变量的属性和值
-a声明为索引数组(普通数组)
-A声明为关联数组
-i设置变量为整数类型
-r设置变量为只读
-x导出变量为环境变量(相当于使用export关键词)
-t给变量设置 trace(追踪)属性
-l变量赋值时值全部转换为小写
-u变量赋值时值全部转换为大写


总结

Shell中变量的基础使用规则不复杂,相对复杂的字符串、数组、变量运算等内容将在之后的文章中进行介绍。

以上是关于Shell脚本入门 02:变量与特殊变量的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本从入门到实战

Shell脚本从入门到实战

shell 特殊变量特殊扩展变量变量长度计算实践与应用

Bash的变量类型

shell入门练习

Shell脚本编程规范与变量