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:变量与特殊变量的主要内容,如果未能解决你的问题,请参考以下文章