Shell语言中的变量和引用

本文详细介绍了Shell中的变量,包括变量的命名规则、类型(动态、弱类型)、声明方式,特别是通过declare命令。此外,文章讲解了引用的三种形式——单引号、双引号和反引号的差异,以及变量的作用域(全局和局部)。还讨论了环境变量、系统变量、变量赋值和清除、引用与替换等核心概念,通过多个实例展示了如何在Shell脚本中使用和管理变量。
摘要由CSDN通过智能技术生成

变量

简介

变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。变量几乎所有的程序设计语言中都有定义,并且其涵义也大同小异。从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。
在程序的执行过程中,保存数据的内存空间的内容可能会不断地发生变化,但是,代表内存地址的变量名却保持不变。

命名

在Shell中,变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头。对于变量名的长度,Shell并没有做出明确的规定。因此,用户可以使用任意长度的字符串来作为变量名。但是,为了提高程序的可读性,建议用户使用相对较短的字符串作为变量名。
在一个设计良好的程序中,变量的命名有着非常大的学问。通常情况下,用户应该尽可能选择有明确意义的英文单词作为变量名,尽量避免使用拼音或者毫无意义的字符串作为变量名。这样的话,用户通过变量名就可以了解该变量的作用。
例如,下面的变量名都是非常好的选择:

PATH=/sbin
UID=100
JAVA_HOME="/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/../.."
SSHD=/usr/sbin/sshd
变量的类型

Shell是一种动态类型语言和弱类型语言,即在Shell中,变量的数据类型毋需显示地声明,变量的数据类型会根据不同的操作有所变化。准确地讲,Shell中的变量是不分数据类型的,统一地按照字符串存储。 但是根据变量的上下文环境,允许程序执行一些不同的操作,例如字符串的比较和整数的加减等等。

【例1】演示Shell变量的数据类型

#!/bin/bash
x=123			#定义变量x,并且赋值为123
let "x += 1" 	#变量x加1
echo "x = $x"	#输出变量x的值	124
echo			#显示空行
y=${x/1/abc}	#替换x中的1为abc,并且将值赋给变量y		abc24
echo "y = $y"	#输出变量y的值						abc24
declare -i y	#声明变量y
echo "y = $y"	#输出变量y的值
let "y += 1"	#变量y的值加1  #abc24不是整形,便将y变为0,0自增为1
echo "y = $y"	#输出变量y的值	1
echo			#显示空行
z=abc22			#将字符串赋给变量z
echo "z = $z"	#输出变量z的值
m=${z/abc/11}	#替换变量z中的abc为数字11,并且将值赋给变量m
echo "m = $m"	#输出变量m的值
let "m += 1"	#变量m加1		#弱类型,自动变为int型
echo "m = $m"	#输出变量m的值
echo
n=""			#将空串赋给变量n
echo "n = $n"	#输出变量n的值
let "n += 1"	#变量n加1
echo "n = $n"
echo
echo "p = $p"	#输出空变量p的值	#自动赋值为空
let "p += 1"	# 变量p加1
echo "p = $p"

上述代码运行结果

[root@localhost ~]# ./test.sh
x = 124
y = abc24
y = abc24
y = 1
z = abc22
m = 1122
m = 1123
n = 
n = 1
p = 
p = 1

在Shell中,通常情况下用户可以直接使用变量,而毋需先进行定义,当用户第一次使用某个变量名时,实际上就同时定义了这个变量,在变量的作用域内,用户都可以使用该变量。
【例2】演示通过直接使用变量来定义变量

#!/bin/bash   
a=1      			#定义变量a    #类似于 int n=3 这种操作
b="hello"   		#定义变量b        
c="hello world"		#定义变量c     
通过declare命令声明变量

declare attribute variable(声明变量属性)

-p:显示所有变量的值。
-i:将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数,就设置为0。
	declare -i t,把t设置为整型
-r:将变量声明为只读变量。只读变量不允许修改,也不允许删除。readonly,
-a:变量声明为数组变量。但这没有必要。所有变量都不必显式定义就可以用作数组。事实上,在某种意义上,似乎所有变量
	都是数组,而且赋值给没有下标的变量与赋值给下标为0的数组元素相同. array,矩阵,变长数组
-f:显示所有自定义函数,包括名称和函数体。function
-x:将变量设置成环境变量,这样在随后的脚本和程序中可以使用。

【例3】演示使用不同的方法了声明变量,导致变量在不同的环境下表现出不同的行为

#!/bin/bash
x=6/3				#定义变量x,并将一个算术式赋给它
echo "$x"
declare -i x		#定义变量x为整数
echo "$x"			#仍为之前的x
x=6/3				#将算术式赋给变量x,自动转变为2
echo "$x"			#
x=hello				#将字符串赋给变量x
echo "$x"			#给整型变量赋hello,不是整数,只能给x赋值为0
x=3.14				#将浮点数赋给变量x
echo "$x"			
declare +i x		#取消变量x的整数属性
x=6/3				#重新将算术式赋给变量x
echo "$x"			#6/3
x=$[6/3]			#求表达式的值
echo "$x"			#2
x=$((6/3))			#求表达式的值
echo "$x"			#2
declare -r x		#声明只读变量x
echo "$x"			#2
x=5					#尝试为只读变量赋值
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值