Shell变量定义和基本操作
你真的了解shell变量 ?通过本文你将学会5种定义变量方式、赋值、引用、以及它的基本操作,学会如何定义变量的属性信息,如变量只读,变量大写等
你真的了解shell变量 ?通过本文你将学会5种定义变量方式、赋值、引用、以及它的基本操作,学会如何定义变量的属性信息,如变量只读,变量大写等。
目录
本文内容同微信公众号【凡登】,关注不迷路,学习上高速,欢迎关注共同学习。
一、变量定义
1、命名规范
变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)
注:一般系统变量或环境变量由大写字母和下划线组成, 用户自定义一般使用小写
# 示例1:
name
name123
NAME
_NAME
__NAME
APP_PATH
二、变量基本操作
主要介绍了如何定义、查看、更新、删除变量, 并附带介绍了一些操作变量的细节。
1、定义变量
这里简单介绍了5种变量定义方式:简单定义(常用)、declare命令、readonly命令、typeset命令、local命令。
1.1、简单定义
格式: name=value 注:= 前后不能有空格
# 示例1:定义变量
[root@VM-0-9-centos ~]# varname=value
value
# 示例2:等号前后出现空格后,会把变量名当做命令
[root@VM-0-9-centos ~]# varname = value
bash: varname: command not found
1.2、declare命令
格式:declare -[可选参数] name=value 可选参数:[iaflosr]
小技巧:详细参数可通过 man declare自行查看
- 定义整型变量: declare -i var=value
# 示例1、整型: declare -i var=value
# 定义整形变量
[root@VM-0-9-centos ~]# declare -i var=12
[root@VM-0-9-centos ~]# echo $var
12
# 赋值为浮点数异常
[root@VM-0-9-centos ~]# declare -i var=12.34
bash: declare: 12.34: syntax error: invalid arithmetic operator (error token is ".34")
- 定义值为小写的变量 declare -l var=value
# 示例2、大写转小写: declare -l var=value
[root@VM-0-9-centos ~]# declare -l v1=AAA
[root@VM-0-9-centos ~]# echo $v1
aaa
- 定义只读变量 declare -r name=value
# 示例3、定义只读变量
[root@VM-0-9-centos ~]# declare -r read_only_name=value
1.3、readonly命令
格式:readonly name=value
将变量属性定义为只读变量, 与上述declare -r name=value效果相同
# 示例1:定义只读变量
[root@VM-0-9-centos ~]# readonly read_only_name=value
1.4、typeset命令
格式:typeset -[可选参数] var=abc 可选参数:[ulLR]
typeset是bash的内建命令,与declare命令完全一样,声明shell变量并设置变量的属性,当改变一个变量的属性时,这种改变是永久的。
- 定义值变量值为大写:
# 示例1:变量大写
[root@VM-0-9-centos ~]# typeset -u VAR=abc
[root@VM-0-9-centos ~]# echo $VAR
ABC
- 定义变量值为小写:
# 示例2:变量小写
[root@VM-0-9-centos ~]# typeset -l var=ABCDE
[root@VM-0-9-centos ~]# echo $var
abcde
1.5、local 命令
格式: local name[=value]
定义局部变量, 如果不指定 value,则变量的初始值为null
# 示例1:定义局部变量
[root@VM-0-9-centos ~]#
function my_fun() {
local var="Hello, World!" # 定义局部变量 var
echo "$var, 123" # 输出局部变量的值
}
my_fun # 运行函数
echo "$var, 456" # 输出局部变量
# 结果
[root@VM-0-9-centos ~]# bash fun.sh
Hello, World!,123
,456
小结:这里介绍了变量5种定义方式,可以除了第一种常见定义,declare、readonly、typeset定义变量的同时,也可以定义变量的一些属性,而local定义了变量的同时,定义了变量的作用范围。
2、查看变量
- 使用$查看变量:
# 示例1:使用 $变量名 直接查看变量
[root@VM-0-9-centos ~]# echo "$name, hello"
joey, hello
- 使用${}查看变量:
# 示例2:使用 ${变量名} 查看变量, 指定变量引用范围
[root@VM-0-9-centos ~]# echo "$name666, hello"
, hello
[root@VM-0-9-centos ~]# echo "${name}666, hello"
joey666, hello
小结:$和是${}一种简写形式,最主要区别在于${}可以表示具体引用范围
3、更新变量
3.1、普通变量更新
# 示例1:修改变量
[root@VM-0-9-centos ~]# name=yeoj ; echo "$name, hello"
yeoj, hello
3.2、更新带有属性信息的变量
- 更新只读变量
# 示例2:修改只读变量
[root@VM-0-9-centos ~]# read_only_name="read-only value1111111"
bash: read_only_name: readonly variable
- 更新整数变量
# 定义整形变量
[root@VM-0-9-centos ~]# declare -i var=12
# 更新
[root@VM-0-9-centos ~]# var=1212
[root@VM-0-9-centos ~]# echo $var
1212
# 更新为浮点数
[root@VM-0-9-centos ~]# var=123.456
bash: 123.456: syntax error: invalid arithmetic operator (error token is ".456")
- 更新大写变量
# 定义大写变量
[root@VM-0-9-centos ~]# typeset -u VAR=abc
[root@VM-0-9-centos ~]# echo $VAR
ABC
# 更新变量
[root@VM-0-9-centos ~]# VAR=aBc
[root@VM-0-9-centos ~]# echo $VAR
ABC
4、删除变量
4.1、删除普通变量
# 示例1:删除普通变量
[root@VM-0-9-centos ~]# unset name
[root@VM-0-9-centos ~]# echo "$name, hello"
, hello
4.2、删除带有属性信息的变量
- 删除只读变量
# 示例2:删除只读变量
[root@VM-0-9-centos ~]# unset read_only_name
bash: unset: read_only_name: cannot unset: readonly variable
- 删除大写变量
# 删除变量
[root@VM-0-9-centos ~]# unset VAR
[root@VM-0-9-centos ~]# echo "$VAR, hello"
, hello
小结:其他带有属性信息的变量的删除操作相同,只读变量的操作稍有差异,从这里可以看出,只读变量生命周期同shell脚本或进程,随着他们运行而开始,运行结束而消亡。
三、总结
这里学会了变量定时的5种方式,简单定义,decalre、readonly、typeset、local, 他们主要区别在于,delcare、readonly、typeset定义变量的属性,而local定义了变量的作用范围,在引用或查看变量时,一般使用简化方式$, 也可以使用${}标识变量的范围。因为变量属性的不同,他们的更新和删除也略有不同,其中只读变量首次定义赋值后,不能修改和删除,但是可以被引用, 总结只读变量用于一些初始化场景, 一旦定义赋值后不能修改,且仅存在于当前进程或终端,除非整个bash进程执行完或终端关闭。
再次感谢您的阅读,欢迎关注微信公众号【凡登】共同学习。
更多推荐
所有评论(0)