本帖最后由 风精灵 于 2025-12-4 09:51 编辑
自定义变量自定义变量是用户在脚本中定义的变量,用于存储特定的值或信息。这些变量的作用范围通常限于定义它们的脚本或当前的 shell 会话。关于自定义变量的特点如下: 1. 变量名的定义 变量名定义需要注意以下几点: l 变量名由数字、字母、下划线组成 l 必须以字母或者下划线开头 l 不能使用Shell里的关键字(如,$,#,?等,通过help命令可以查看保留关键字) 2. 变量的赋值 赋值“=”左右不能有空格。 变量值可以加单引号、双引号、或者不加引号, 如果变量值包含了空格、或tab等空白符号,那么就必须使用引号包围起来。其中加单引号的变量值,输出时,直接将变量值当做一串字符串输出,不关心变量值中是否存在变量和命令。而加双引号的变量值,输出时会先解析里面的变量和命令,按照解析后的结果进行输出。 变量值可以是一个命令执行的结果,使用反引号和$()的方式,可以将命令执行结果赋值给变量。 3. 变量的使用 使用一个定义过的变量,只要在变量名前面加美元符号$即可,变量名可以使用{ }包围起来,也可不使用{ }。 举例说明(为了方便,我们直接在shell环境终端进行举例演示变量的使用,不再写入脚本,其与在脚本中使用方法一致): 1)变量值无空格 var=value 使用echo输出变量var,echo $var或者echo ${var},如图: 也可以加上单引号或者双引号: var='value'或var="value": 2)变量值有空格 var='value 0'或var="value 0": 3)将命令执行结果赋值给变量 首先建立一个test.txt文件,输入内容为“my test!!”: 使用反引号方式包括命令“cat test.txt”,将test.txt中内容赋予变量var: 使用$()方式赋值给var: 4)变量中引用变量或者命令的情况 var0=123; 使用单引号定义var1的值:var1='var0 =${var0}'; 使用双引号定义var1的值:var2="var0 =${var0}"; 看执行结果: 可以看出var1的值直接当做字符串输出,而var2的值,经过解析变量中的变量var0之后进行才输出。 4. 变量的修改 变量的修改就比较简单了,直接给定义后的变量二次赋值就可以了。 5. 变量的删除 删除一个定义过的变量,使用unset命令。 6. 将变量设置为只读变量 也可以将变量设置为只读模式,不允许修改,使用readonly命令。设置为只读变量后,不能用unset删除变量。如果还是用该变量,需要重启新的终端操作。 可以看到使用readonly命令之后,在此修改var变量,没有修改成功。 7. 字符串与引号 在定义变量的时候会使用到很多引号和字符串之间的特性,这里做简单介绍。 字符串是Shell编程中最常见的变量,没有空格的字符串变量可以用单引号或者双引号引起来,也可以不用引号。但是当变量是存在空格的字符串时就需要使用单引号或者双引号,否则操作系统将会把空格后面的字符串识别成命令。 1)单引号 单引号对字符串的限制如下: l 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的 l 单引号中的字符串中不能出现单独的一个单引号,但可以成对出现,起到字符串拼接的作用 l 单引号会让Shell忽略所有的特殊字符 2) 双引号 双引号对字符串的限制如下: 双引号中可以存在变量 双引号中可以出现特殊字符 双引号只会忽略一部分特殊字符 3)反引号 反引号与单双引号的功能不同,单双引号是用来定义变量的,而反引号是用来命令替换的。 命令替换是指Shell能够将一个命令的标准输出插入在一个命令行中的任何位置。 8. 将命令结果复制给变量 在日常使用中将命令的结果赋值给变量是非常常见的,对需要获取命令结果的变量内容赋值常见的有两种方法。 第一种是:变量=`命令` 第二种是:变量=$(命令) 这里需要注意的是,在变量名前加$可以取得该变量的值,使用echo命令可以显示变量的值,$A和${A}的写法不同,但效果是一样的。 当变量后面连接有其他字符的时候,必须给变量加上大括号{},例如$dbname_tname就要改成${dbname}_tname。 |