Shell变量定义和基本操作

你真的了解shell变量 ?通过本文你将学会5种定义变量方式、赋值、引用、以及它的基本操作,学会如何定义变量的属性信息,如变量只读,变量大写等。

目录

一、变量定义

1、命名规范

二、变量基本操作

1、定义变量

1.1、简单定义

1.2、declare命令

1.3、readonly命令

1.4、typeset命令

1.5、local 命令

2、查看变量

3、更新变量

3.1、普通变量更新

3.2、更新带有属性信息的变量

4、删除变量

4.1、删除普通变量

4.2、删除带有属性信息的变量

三、总结


本文内容同微信公众号【凡登】,关注不迷路,学习上高速,欢迎关注共同学习。

一、变量定义

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值