• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-Shell脚本编写基础-自定义变量

08/18 17:28
133
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

自定义变量是用户在脚本中定义的变量,用于存储特定的值或信息。这些变量的作用范围通常限于定义它们的脚本或当前的 shell 会话。关于自定义变量的特点如下:

变量名的定义

变量名定义需要注意以下几点:

l 变量名由数字、字母、下划线组成

l 必须以字母或者下划线开头

l 不能使用Shell里的关键字(如,$,#,?等,通过help命令可以查看保留关键字)

变量的赋值

赋值“=”左右不能有空格。

变量值可以加单引号、双引号、或者不加引号, 如果变量值包含了空格、或tab等空白符号,那么就必须使用引号包围起来。其中加单引号的变量值,输出时,直接将变量值当做一串字符串输出,不关心变量值中是否存在变量和命令。而加双引号的变量值,输出时会先解析里面的变量和命令,按照解析后的结果进行输出。

变量值可以是一个命令执行的结果,使用反引号和$()的方式,可以将命令执行结果赋值给变量。

变量的使用

使用一个定义过的变量,只要在变量名前面加美元符号$即可,变量名可以使用{ }包围起来,也可不使用{ }。

举例说明(为了方便,我们直接在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之后进行才输出。

变量的修改

变量的修改就比较简单了,直接给定义后的变量二次赋值就可以了。

变量的删除

删除一个定义过的变量,使用unset命令。

将变量设置为只读变量

也可以将变量设置为只读模式,不允许修改,使用readonly命令。设置为只读变量后,不能用unset删除变量。如果还是用该变量,需要重启新的终端操作。

可以看到使用readonly命令之后,在此修改var变量,没有修改成功。

字符串与引号

在定义变量的时候会使用到很多引号和字符串之间的特性,这里做简单介绍。

字符串是Shell编程中最常见的变量,没有空格的字符串变量可以用单引号或者双引号引起来,也可以不用引号。但是当变量是存在空格的字符串时就需要使用单引号或者双引号,否则操作系统将会把空格后面的字符串识别成命令。

1)单引号

单引号对字符串的限制如下:

l 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的

l 单引号中的字符串中不能出现单独的一个单引号,但可以成对出现,起到字符串拼接的作用

l 单引号会让Shell忽略所有的特殊字符

2) 双引号

双引号对字符串的限制如下:

双引号中可以存在变量

双引号中可以出现特殊字符

双引号只会忽略一部分特殊字符

3)反引号

反引号与单双引号的功能不同,单双引号是用来定义变量的,而反引号是用来命令替换的。

命令替换是指Shell能够将一个命令的标准输出插入在一个命令行中的任何位置。

将命令结果复制给变量

在日常使用中将命令的结果赋值给变量是非常常见的,对需要获取命令结果的变量内容赋值常见的有两种方法。

第一种是:变量=`命令`

elf@ubuntu:~$ A=`ls`

第二种是:变量=$(命令)

elf@ubuntu:~$ B=$(ls)

这里需要注意的是,在变量名前加$可以取得该变量的值,使用echo命令可以显示变量的值,$A和${A}的写法不同,但效果是一样的。

当变量后面连接有其他字符的时候,必须给变量加上大括号{},例如$dbname_tname就要改成${dbname}_tname。

相关推荐